19

Я был убежден (в переполнении стека) использовать мой любимый bash в режиме vi. До сих пор я достаточно хорошо к этому привык и мне это нравится.

Однако я действительно упускаю одну особенность: в режиме emacs вы можете ввести последний параметр предыдущей команды, нажав «ESC». (То есть нажмите клавишу escape, а затем.)

Есть ли привязка по умолчанию для вставки последнего параметра в vi-mode? Я не смог найти ни одного, и я действительно скучаю по этой команде ...

6 ответов6

11

Там (vi-yank-arg), по умолчанию отображается на "_". Это должно делать то, что вы хотите (в командном режиме).

9

Там нет по умолчанию. Привязка для 'yank-last-arg' (как указано в 'bind -p') исчезает, когда вы переключаетесь в режим vi.

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

даст вам ту же привязку обратно (или выбрать что-то еще)

7

Не совсем то же самое, но в любом режиме вы можете печатать !$ , и он будет заменен последним словом предыдущей команды. Найти больше таких вещей в руководстве.

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

Вы можете найти подробную информацию о readline и bind -p здесь: http://linux.about.com/library/cmd/blcmdl3_readline.htm

И некоторая информация о комбинациях клавиш Vi в bash и в режиме редактирования Readline 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-mode и по-прежнему использовать ярлыки, которые вы знаете и любите. Если вам нужно больше действий, просто отметьте "man bash", чтобы найти название нужного вам действия readline (например, "очистить экран", "конец строки" и т.д.).

0

Вы можете использовать $_ для ссылки на последний аргумент предыдущей команды.

Недостатки:

  1. Перед нажатием Enter вы не можете проверить, что вставленная вещь - это та, которую вы намеревались вставить.

  2. Если вы используете PROMPT_COMMAND или ловушку DEBUG (я не уверен, что именно это и вызывает проблему; у меня есть оба в моем .bashrc), чтобы делать причудливые вещи, такие как вставка команды running в заголовок xterm, это приведет к тому, что $_ clobber.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .