![VI 키를 사용하여 UNIX에서 쉘 명령 편집](https://rvso.com/image/23944/VI%20%ED%82%A4%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20UNIX%EC%97%90%EC%84%9C%20%EC%89%98%20%EB%AA%85%EB%A0%B9%20%ED%8E%B8%EC%A7%91.png)
예전에는 UNIX를 정말 잘 다루는 동료가 있었습니다.
그는 Vi 키 바인딩을 사용하여 쉘 명령을 편집하는 방법을 보여주었습니다.
그는 내가 로그인할 때마다 실행되는 파일에 명령을 저장했습니다.
그 이후로 저는 다른 프로젝트로 옮겼습니다.
불행히도 나는 이것을 설정하는 방법을 기억하지 못합니다.
Vi 키 바인딩을 사용하여 터미널에서 명령을 편집하는 방법을 아는 사람이 있습니까?
해당 설정을 어떻게 영구적으로 만들 수 있나요?
답변1
당신은 지금까지의 가장 큰 기능에 대해 이야기하고 있습니다!
vi 명령을 사용하여 파일에 다음을 추가하면 셸 명령(및 명령 기록)을 편집할 수 있습니다 .bashrc
.
set -o vi
명령줄에서 해당 명령을 실행하여 현재 세션에만 영향을 미칠 수도 있습니다.
bash를 사용하지 않는 경우 쉘을 적절한 rc 파일로 대체하십시오.
이를 통해 vi 명령을 사용하여 모든 명령을 편집할 수 있습니다.
j와 를 사용하여 k기록을 이동할 수도 있습니다 ( 를 누른 후 ESC).
/를 누른 후 를 사용하여 ESC이전 명령을 검색 할 수도 있습니다 .
즉, cp
10분 전에 수행한 매우 긴 명령을 찾으려면 다음을 수행하십시오.
ESC/CPENTER
n그런 다음 및 를 사용하여 기록에서 일치하는 모든 명령을 순환할 수 있습니다 N.
이 모든 덕분에 명령줄 생산성이 10조 배 더 높아졌습니다!
답변2
bash를 사용하고 있다면 jahroy와 evil otto가 이미 답변했듯이 다음을 사용할 수 있습니다.
set -o vi
bash가 vi 스타일 편집 명령을 사용하도록 합니다.
이 작업을 완료한 후에는 Esc v현재 명령줄의 복사본이 포함된 임시 파일을 입력하여 vi 편집기를 시작할 수 있습니다. 명령을 편집할 수 있으며 여러 줄로 바꿀 수도 있습니다. 파일( )을 저장하면 :wq
쉘이 편집된 명령을 실행합니다.
너가 선호한다면
set -o emacs
Ctl-XCtl-E동일한 작업을 수행하는 데 사용할 수 있습니다 . $EDITOR
반드시 emacs가 아닌 선호하는 편집기를 사용합니다 .
set -o emacs
(개인적으로 저는 대부분의 편집 작업에 vi(실제로는 vim)를 사용하지만 셸을 선호합니다. 삽입 모드를 전환하는 것은 파일 편집에는 좋지만 대화형 명령에는 불편합니다. YMMV.)
답변3
@jahroy가 게시한 대로 줄 편집 명령을 변경하는 데 사용할 수 있지만 이전 명령을 편집기(FCEDIT 또는 EDITOR)에 넣는 명령(bash에서 사용 가능하고 ksh에서는 사용 가능하지만 아마도 tcsh는 아닐 것임)을 set -o vi
생각할 수도 있습니다. fc
, vi로 설정했을 수도 있음) 그런 다음 편집기를 종료할 때 명령을 실행합니다. 맨페이지나 help fc
자세한 내용을 참조하거나 직접 사용해 보세요.
답변4
실제로 이것은 실제로 가장 큰 기능입니다. 하지만 더 많은 것이 있습니다:
라는 이름의 파일을 생성합니다.
.editrc
라인을 포함하는
bind -v
편집라인는 readline과 유사한 서비스를 제공하는 BSD 라이센스 버전 라이브러리입니다. .editrc는 MySQL의 명령줄 셸이나 readline을 사용하지 않는 모든 응용 프로그램에서 키 바인딩을 vi 모드로 설정합니다.
나는 세월이 지나면서 다소 건망증이 생겼습니다. 그래서 내 .zshrc일부 래퍼 소스 제공vi 모드의 경우 현재 명령줄에 어떤 모드가 있는지 표시합니다. 좋네요.
나는 zsh에서 당신이 입력할 수 있다는 것을 안다
bindkey -L
키 바인딩 목록을 가져옵니다. 나는 bash에도 비슷한 것이 있어야 한다고 확신합니다. 모든 vi 키가 기본적으로 바인딩되어 있는 것은 아닙니다. 당신이 적합하다고 생각하는 방식으로 묶고 경주를 시작하십시오.