bash / readline эквивалент escape-точки в vi-режиме - PullRequest
10 голосов
/ 27 июля 2011

После недавнего переключения в vi-mode в bash мне не хватает лишь esc . , чтобы получить последний аргумент последней команды.

Iзнаю о ctrl _ , но я всегда заканчиваю тем, что нажимаю ctrl - .

Есть ли другой vi-эквивалентный режим для этого?

Ответы [ 6 ]

9 голосов
/ 17 марта 2012

Я считаю, что самое близкое решение к тому, что вы хотите, это:

В вашем .bashrc, сразу после "set -o vi" ...

set -o vi
bind -m vi-command ".":insert-last-argument

Это говорит вашему bash, что нужно вызывать действие "insert-last-arguments", когда '.' используется в режиме vi-command. Это, конечно, означает, что вы теряете нормальное "." функциональность ВИ; но если вы похожи на меня, вы предпочтете это.

Добавление : Вы также можете захотеть Ctrl-A , Ctrl-E , Ctrl-W и Ctrl-L для работы (это были те, которые были Я скучал больше всего):

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
4 голосов
/ 06 ноября 2012

Вы также можете использовать следующее для восстановления поведения emacs "escape-точка вставляет последний аргумент" в режиме vi:

bindkey -v '\e.' insert-last-word
3 голосов
/ 01 мая 2015

Изменяя или добавляя ~ / .inputrc

Чтобы восстановить некоторые полезности bash в vi-режиме, просто измените или добавьте ~ / .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

$if mode=vi
"\C-a": beginning-of-line
"\C-e": end-of-line
"\C-l": clear-screen
"\C-n": next-history
"\C-p": previous-history
"\C-w": backward-kill-word

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

Вот больше привязываемых команд readline bash .

2 голосов
/ 27 июля 2011

Я всегда использовал alt . , чтобы получить последний аргумент последней команды.

Кроме того, !$ даст вам последний аргументпоследняя команда выполнена.Есть несколько интересных вещей, которые вы можете сделать с восклицательным знаком, просто загляните на страницу man для bash и выполните поиск по расширению истории.

1 голос
/ 27 июля 2011

Как насчет использования переменной $ _ bash?

0 голосов
/ 19 сентября 2011

Я почти уверен, что вы все равно можете использовать эквивалент для режима vi, который должен быть "ESC +".

...