Último parâmetro do último comando no bash no modo vi

19

Eu estou convencido (no Stack Overflow) a usar meu amado bash no modo vi. Até agora me acostumei bastante e gostei.

No entanto, eu realmente sinto falta de um recurso: No modo emacs, você pode inserir o último parâmetro do comando anterior pressionando "ESC". (Isto é, pressione escape seguido pelo.)

Existe uma ligação padrão para inserir o último parâmetro no modo vi? Eu não consegui encontrar um e realmente sinto falta desse comando ...

    
por Mo. 05.08.2009 / 15:52

6 respostas

9

Não há padrão. A ligação para 'yank-last-arg' (conforme listado por 'bind -p') desaparece quando você alterna para o modo vi.

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

vai lhe dar a mesma ligação de volta (ou escolher outra coisa)

    
por 05.08.2009 / 16:18
11

Há (vi-yank-arg), por padrão, mapeado para "_". Isso deve fazer o que você quiser (no modo de comando).

    
por 22.01.2010 / 17:07
7

Não é exatamente o mesmo, mas em qualquer modo você pode digitar !$ e será substituído pela última palavra do comando anterior. Encontre mais coisas desse tipo no manual .

    
por 05.08.2009 / 16:11
5

O arquivo ~ / .inputrc pode configurar o mapa-chave (você pode gerá-lo por manual se não for encontrado). Adicione o seguinte comando no ~ / .inputrc :

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

Meu ~ / .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

Você pode encontrar os detalhes sobre readline e bind -p aqui: link

E algumas informações sobre keyblings do Vi no bash e Folha de dicas do modo de edição Readline VI

    
por 01.03.2013 / 11:37
3

Dentro do seu .bashrc, adicione estes:

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

Estes irão restaurar o comportamento padrão, não apenas de ESC-dot, mas também de Ctrl-A, Ctrl-E, Ctrl-W e Ctrl-L. Você pode, portanto, desfrutar do bash-vi normal e ainda usar os atalhos que você conhece e ama. Se você precisar de mais ações, apenas marque "man bash" para encontrar o nome da ação readline que você precisa (como "clear-screen", "end-of-line", etc).

    
por 19.03.2012 / 17:04
0

Você pode usar $_ para se referir ao último argumento do comando anterior.

As desvantagens são:

  1. Você não pode verificar antes de pressionar Enter que a coisa inserida é o que você pretendia inserir.

  2. Se você usar PROMPT_COMMAND ou uma armadilha DEBUG (não tenho certeza qual, exatamente, causa o problema; tenho ambos em meu .bashrc) para fazer coisas sofisticadas como colocar o comando em execução no título xterm, ele vai atrapalhar $_ .

por 19.03.2012 / 17:42

Tags