Usando chaves VI para editar comandos shell no UNIX

Usando chaves VI para editar comandos shell no UNIX

Eu costumava ter um colega de trabalho que era muito bom em UNIX.

Ele me mostrou como usar as combinações de teclas do Vi para editar meus comandos do shell.

Ele colocou o comando em um arquivo que era executado sempre que eu fazia login.

Desde então, mudei para um projeto diferente.

Infelizmente não me lembro como configurar isso.

Há alguém aqui que saiba como usar as combinações de teclas do Vi para editar comandos no terminal?

Como posso tornar essa configuração permanente?

Responder1

Você está falando sobre o melhor recurso de todos os tempos!

Você pode usar comandos vi para editar comandos shell (e histórico de comandos) adicionando isto ao seu .bashrcarquivo:

set -o vi

Você também pode executar esse comando na linha de comando para afetar apenas a sessão atual.

Se você não usa o bash, substitua o arquivo rc apropriado pelo seu shell.


Isso permite que você use comandos vi para editar qualquer comando...

Você também pode usar je kpara percorrer seu histórico (depois de pressionar ESC).

Você também pode usar /(depois de pressionar ESC) para procurar comandos antigos.

Em outras palavras, para encontrar aquele comando superlongo que cpvocê executou há dez minutos:

ESC/CPENTER

Então você pode percorrer todos os comandos correspondentes em seu histórico com ne N.

Tudo isso me torna 10 trilhões de vezes mais produtivo na linha de comando!

Responder2

Se você estiver usando o bash, como jahroy e evil otto já responderam, você pode usar

set -o vi

para fazer com que o bash use comandos de edição no estilo vi.

Depois de fazer isso, você pode digitar Esc vpara iniciar o editor vi com um arquivo temporário contendo uma cópia da linha de comando atual. Você pode editar o comando, até mesmo substituindo-o por múltiplas linhas; quando você salva o arquivo ( :wq), o shell executará os comandos editados.

Se você preferir

set -o emacs

você pode usar Ctl-XCtl-Epara fazer a mesma coisa. Ele usará seu editor preferido $EDITOR, não necessariamente o emacs.

(Pessoalmente, eu uso o vi (na verdade, vim) para a maior parte da minha edição, mas prefiro set -o emacsno shell; entrar e sair do modo de inserção é ótimo para editar arquivos, mas estranho para comandos interativos. YMMV.)

Responder3

Você pode usar set -o vipara alterar seus comandos de edição de linha como @jahroy postou, mas você pode estar pensando no fccomando (disponível no bash e acho que ksh, mas provavelmente não no tcsh), que colocará o comando anterior em um editor (FCEDIT ou EDITOR , que você provavelmente configurou como vi) e então executa o comando ao sair do editor. Consulte a página de manual ou help fcpara obter detalhes, ou apenas experimente.

Responder4

Na verdade, esta é de fato a maior característica de todos os tempos. Porém, há mais:

Crie um arquivo chamado

.editrc

contendo a linha

bind -v

Linha de edição, é uma biblioteca de versão licenciada BSD que fornece serviços semelhantes aos do readline. Esse .editrc definirá suas combinações de teclas para o modo vi no shell de linha de comando do MySQL ou em qualquer aplicativo que não use readline.

Fiquei um pouco esquecido com o passar dos anos, então meu .zshrcfornece alguns wrapperspara o modo vi, para me mostrar em que modo estou na linha de comando. É legal.

Eu sei que no zsh você pode digitar

bindkey -L

e obtenha a lista de atalhos de teclado. Tenho certeza que o bash deve ter algo semelhante. Nem todas as chaves vi estão vinculadas por padrão. Amarre-os como achar melhor e você estará pronto para as corridas.

informação relacionada