Bash/эквивалент readline escape-точки в режиме vi

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

Я знаю о ctrl _, но я всегда попадаю вместо ctrl -.

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

Ответ 1

Я считаю, что ближайшим решением для вас является следующее:

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

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

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

Добавление: Вы также можете хотеть 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

Ответ 2

Вы также можете использовать следующее, чтобы восстановить поведение emacs "escape-dot inserts last argument" в режиме vi:

bindkey -v '\e.' insert-last-word

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

Ответ 6

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