Usando chaves VI para editar comandos shell no UNIX

28

Eu costumava ter um colega de trabalho que era realmente bom no UNIX.

Ele me mostrou como usar as teclas do Vi para editar meus comandos do shell.

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

Desde então, mudei para um projeto diferente.

Infelizmente, não me lembro de como configurar isso.

Existe alguém aqui que saiba como usar as teclas do Vi para editar comandos no terminal?

Como posso tornar essa configuração permanente?

    
por user919860 13.07.2012 / 20:47

6 respostas

31

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

Você pode usar os comandos vi para editar os comandos do shell (e o histórico de comandos) adicionando isso ao seu arquivo .bashrc :

set -o vi

Você também pode executar esse comando a partir da linha de comando para afetar somente sua 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 j e k para 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 o comando super-long cp que você fez há dez minutos:

ESC / cp ENTER

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

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

    
por 13.07.2012 / 20:56
12

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

set -o vi

para fazer o bash usar comandos de edição no estilo vi.

Uma vez feito isso, você pode digitar Esc v para iniciar o editor vi com um arquivo temporário contendo uma cópia da linha de comando atual. Você pode editar o comando, mesmo substituindo-o por várias linhas; quando você salvar o arquivo ( :wq ), o shell executará os comandos editados.

Se você preferir

set -o emacs

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

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

    
por 13.07.2012 / 22:05
10

Você pode usar set -o vi para alterar seus comandos de edição de linhas como @jahroy postado, mas você pode estar pensando no comando fc (disponível no bash e acho que ksh, mas provavelmente não tcsh), que colocará o comando comando anterior em um editor (FCEDIT ou EDITOR, que você provavelmente configurou para vi) e, em seguida, executa o comando quando você sai do editor. Veja a página de manual ou help fc para mais detalhes, ou apenas experimente.

    
por 13.07.2012 / 21:03
6

Para editar o comando usado mais recentemente no vim e invocar uma versão editada após o editor salvar e sair, use fc shell embutido. Sem argumentos, fará o seguinte:

  1. Cria um arquivo temporário em /tmp e o preenche com o comando digitado mais recentemente
  2. Depois que o editor sai normalmente (com o código de saída 0), ele executa o comando localizado nesse arquivo temporário e remove esse arquivo. A versão editada é salva no histórico como um comando usual (pelo menos em zsh). Ele não executa nada se o editor sair com código diferente de zero (no vim isso pode ser feito matando-o ou usando :cquit ).

O comando funciona tanto no bash quanto no zsh.

    
por 14.07.2012 / 02:58
5

Na verdade, esse é, de fato, o maior recurso de todos os tempos. Ainda tem mais:

Crie um arquivo chamado

.editrc

contendo a linha

bind -v

Editline , é uma biblioteca de versões licenciadas pelo BSD que fornece serviços parecidos com readline. Isso .editrc irá configurar seus atalhos de teclado para o modo vi no shell de linha de comando do MySQL, ou qualquer aplicativo que não use readline.

Eu cresci um pouco esquecido com o passar dos anos, então meu .zshrc cria alguns wrappers para o modo vi, para me mostrar em que modo estou na linha de comando. É legal.

Eu sei em zsh você pode digitar

bindkey -L

e obtenha a lista de atalhos de teclado. Tenho certeza que o bash deve ter algo parecido. Nem todas as chaves vi estão vinculadas por padrão. Vincule-os à sua maneira e você está fora das corridas.

    
por 20.07.2012 / 23:55
1

no seu terminal, digite export EDITOR=vi .

Para salvar esta configuração. coloque esta linha no arquivo ~ / .profile

    
por 13.07.2012 / 20:52