vi 모드에서 bash의 마지막 명령의 마지막 매개 변수


19

vi 모드에서 사랑하는 배쉬를 사용하도록 (스택 오버플로에서) 확신했습니다. 지금까지 나는 그것에 익숙해졌고 그것을 좋아합니다.

그러나 나는 정말로 하나의 기능을 놓쳤다. emacs-mode에서 "ESC"를 눌러서 이전 명령의 마지막 매개 변수를 입력 할 수있다. (즉, 이스케이프 다음에 키를 누르십시오.)

vi 모드에서 마지막 매개 변수를 삽입하는 기본 바인딩이 있습니까? 나는 하나를 찾을 수 없었고 나는이 명령을 정말로 그리워합니다 ...

답변:


9

기본값은 없습니다. vi 모드로 전환하면 'yank-last-arg'( 'bind -p'로 나열)에 대한 바인딩이 사라집니다.

bind '"\e."':yank-last-arg

동일한 바인딩을 다시 제공하거나 다른 것을 선택합니다.


1
zsh에 대한 복제bindkey "\e." insert-last-word
jhvaras

나는 zsh에서 수년 동안 그것을 가지고 있었고 bash를 사용하도록 강요받을 때마다 (예 : 직장 서버에서) bash에서 어떻게 설정 해야하는지 결코 잊어 버린다. 더 이상은 없어! 이것과 함께 history-search-backwards심각한 명령 행 사용자에게는 귀중합니다.
Sridhar Sarnobat

11

기본적으로 "_"에 매핑 된 (vi-yank-arg)가 있습니다. 원하는대로해야합니다 (명령 모드에서).


+1. 이 답변이 왜 받아 들여지지 않았는지 모르겠습니다.
Sathyam

7

정확히 동일하지는 않지만 어느 모드에서나 입력 !$하면 이전 명령의 마지막 단어로 바뀝니다. 매뉴얼 에서 더 많은 것들을 찾으십시오 .


공감대를 얻을 수있을만큼 가까워 지지만 정확히 같지는 않습니다 ... 실행하기 전에 줄을 편집 할 가능성이 없습니다. 그러나 어쨌든 많은 감사합니다!
Mo.

5

~ / .inputrc 파일은 (는 찾을 수없는 경우 수동으로 그것을 생성 할 수 있습니다) 키 맵을 구성 할 수 있습니다. ~ / .inputrc에 다음 명령을 추가하십시오 .

"\e.": yank-last-arg
"\e_": yank-last-arg

내 ~ / .inputrc는 다음과 같습니다.

set completion-ignore-case on
set show-all-if-ambiguous on
set show-all-if-unmodified on

set editing-mode vi
set keymap vi-insert

"\C-p": previous-history
"\C-n": next-history
"\C-a.":beginning-of-line
"\C-e.":end-of-line

"\e.": yank-last-arg
"\e_": yank-last-arg

당신에 대한 자세한 내용은 찾을 수 의 readlinebind -p: 여기 http://linux.about.com/library/cmd/blcmdl3_readline.htm를

그리고 bashReadline VI 편집 모드 치트 시트의 Vi 키 블라인드에 대한 정보


3

.bashrc 안에 다음을 추가하십시오.

set -o vi
bind -m vi-command ".":insert-last-argument
bind -m vi-insert "\C-l.":clear-screen
bind -m vi-insert "\C-a.":beginning-of-line
bind -m vi-insert "\C-e.":end-of-line
bind -m vi-insert "\C-w.":backward-kill-word

이것들은 ESC- 점뿐만 아니라 Ctrl-A, Ctrl-E, Ctrl-W 및 Ctrl-L의 기본 동작을 복원합니다. 따라서 일반적인 bash vi 모드를 즐기고 알고 있고 좋아하는 바로 가기를 계속 사용할 수 있습니다. 더 많은 작업이 필요한 경우 "man bash"를 확인하여 "read-screen", "end-of-line"등과 같은 필요한 readline 작업의 이름을 찾으십시오.


0

$_이전 명령의 마지막 인수를 참조하는 데 사용할 수 있습니다 .

단점은 다음과 같습니다.

  1. Enter를 누르기 전에 삽입 된 것이 삽입하려는 것임을 확인할 수 없습니다.

  2. PROMPT_COMMAND 또는 DEBUG 트랩을 사용하면 (정확하게, 문제를 일으키는 지 확실하지 않습니다. 둘 다 .bashrc에 있습니다) 실행중인 명령을 xterm 제목에 넣는 것과 같은 멋진 작업을 수행하면 클로버가 $_됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.