Vantagens de usar o set -o vi

55

Eu já vi muitos desenvolvedores usando esse comando para definir a opção para vi. Eu nunca entendi o uso real disso?

Ao usar comandos bash, que ajuda a mudança para o vi fornece?

Chander Shivdasani
fonte

Respostas:

58

Ao definir sua edição de linha de leitura como emacs (o padrão) ou vi ( set -o vi), você essencialmente padroniza seus comandos de edição, através do shell e do editor de sua escolha 1 .

Portanto, se você deseja editar um comando no shell, use os mesmos comandos 2 que usaria se estivesse no seu editor de texto. Isso significa que apenas ter que lembrar uma sintaxe de comando e (se isso não fosse vantagem o suficiente) provavelmente tornaria sua edição em ambos os ambientes mais rápida e menos propensa a erros ...

Você pode alavancar ainda mais esse relacionamento no modo vi puxando qualquer comando do histórico do shell, pressionando Escapepara entrar no modo de comando e, em seguida v, pressionando , o que abrirá seu $ EDITOR com o comando carregado para uma edição mais complexa com todo o poder do vim. Depois de concluir a edição do comando, :wqo seu comando é executado de volta no seu shell.


1. Supondo, é claro, que você use o Emacs ou Vi / m como seu editor.
2. Ou, mais precisamente, um subconjunto ...

jasonwryan
fonte
11
Eu tenho o Santo Graal:) ....
Sathyam
3
O truque Esc-v é um dos melhores recursos set -o vique a maioria das pessoas não conhece. Isso é especialmente verdadeiro se você deseja emitir o mesmo comando várias vezes com argumentos diferentes (como vários comandos de linha de comando).
Michael Goldshteyn
2
O truque Esc-v não é realmente uma vantagem específica set -o vi. Na configuração padrão de set -o EMACS, Cx, Ce exibirá uma janela do emacs (ou a $EDITOR, se configurada) na qual você pode editar o comando antes de executá-lo.
John Gowers 31/07
8

O modo Vi é uma enorme melhoria de usabilidade se você estiver usando um cliente SSH móvel como o ConnectBot para Android.

Isso ocorre devido a uma dependência reduzida das chaves modificadoras.

O Vim é muito mais fácil de usar com um teclado virtual em um smartphone ou tablet do que ... qualquer outra coisa, incluindo os métodos de edição nativos incorporados na interface do usuário do Android. Ironicamente, é mais fácil editar fontes C com o Vim em uma sessão SSH do que editar, digamos, uma mensagem instantânea com o próprio widget de edição da plataforma para esse fim.

O modo Shell vi traz um benefício semelhante.

Kaz
fonte
Eu esperava que houvesse o modo vi no teclado do meu telefone. Você menciona que é como se já existisse. Como obtenho o modo vi no meu telefone?
meh
6

Permite editar itens na linha de comando usando os modos e operações do vi.

Um exemplo ajudará a tornar muito mais claro:

Você digita cp tmp/some_other_long_directory/file1.xt /tmp2/some_other_xtra_long_dir/

mas você receber um erro - você deve ter digitado file1.txtnãofile1.xt

Sem essa opção, pressione a seta para cima e, em seguida, pressione a seta para a esquerda e deixe repetir por ... 35 vezes, até chegar ao .xte digitar o extra t. Total de pressionamentos de tecla: 37 .

Com esta opção configurada, você pode (por exemplo) pressionar a seta para cima uma vez e, em seguida, Escapar para o modo de comando, 0 para ir para o início da linha e, em seguida, /xt[return]chegar ao xte, em seguida, pode digitar ipara o modo de inserção e digitar t ausente. Isso pode parecer insanamente complicado em alguns aspectos, mas se você é um usuário do vim, esse comando já é muito conhecido. Total de pressionamentos de tecla: 9

Michael Durrant
fonte
11
Você também pode usar alguns Alt+Bs ou a Ctrl+Alt+] .no modo Emacs, para que isso não pareça um exemplo forte para mim.
Mikel
2
Vendo como estamos golfe: Modo Emacs: Up, Ctrl+Alt+], ., Right, t, Enter= 8. Vi modo: Up, F, ., a, t, Enter= 7. :)
Mikel
@ Mikel, você esqueceu que o modo vi começa no modo Inserir, então você Esctambém está lá, é um empate.
dragon788
5

Não tenho certeza se há uma vantagem direta. Sou viusuário há mais de 20 anos. Também sou screenusuário por mais tempo e de outros programas que usam vichaves. É natural para mim preferir definir o modo "vi" no bash. Mas também trabalho em centenas de servidores no meu trabalho, a maioria está definida no modo "emacs" padrão. Então, eu preciso usar os dois modos. Mas é realmente apenas uma questão de preferência.

Arcege
fonte
Situação semelhante para mim - eu uso muito o vim, mas sempre achei menos trabalhoso se tornar proficiente nas chaves readline padrão do tipo emacs (que podem ser tão convenientes quanto o subconjunto vi) do que adicionar uma alternância de linha para o modo vi em todos os novos sistemas que eu encontrar.
Jw013
11
Não trabalho em centenas de servidores, mas uso o sshrc para manter a minha configuração do bash semelhante entre computadores diferentes quando sshing. Obviamente, isso não ajuda quando estou usando uma máquina localmente que não possui minhas .bashrccoisas.
Kyle Strand
4

A principal vantagem é a edição modal da sua linha de comando. Se você conhece o Vim e gosta de sua filosofia, os benefícios devem ser óbvios. Se você tiver experiência com isso, a memória muscular do seu dedo fará com que você edite seus comandos do bash nas velocidades da luz.

Nota : se você não gosta de edição modal, ainda deve aprender a tirar proveito do modo emacs (padrão). Aqui estão alguns atalhos de teclado bacanas que funcionarão em qualquer processo readline, como bash.

rahmu
fonte
1

Se você se acostumar vi, define-o no modo vi como seu editor de shell. Essa seria a razão óbvia. A outra é quando o bashnão está disponível por padrão em alguns sistemas operacionais (principalmente UNIX como AIX, Solaris), para que o recurso de histórico de shell não está disponível, por isso, a forma como você obter os comandos passados, definindo o editor shell para vi, e Esc, Ctrl+ Kou Ctrl+L

Shâu Shắc
fonte
1

Ele permite que você navegue e edite facilmente a linha de comando usando os atalhos do vim, por exemplo, mova rapidamente para uma palavra à direita e exclua uma palavra.

Pelos atalhos padrão, quando você precisa ir até o final da linha, precisa Ctrl+ e, enquanto que com set -o viapenas pressiona $, como no vim.

Hahn
fonte
1

Provavelmente atrasado para a festa, mas para mim o uso do modo vi é mais importante ao criar scripts interativos. Por exemplo

for i in `ls | grep -v gz`
do
    echo $i
    gzip $i
done

um exemplo muito simples do que poderia ser bastante complicado .. usando o ESCkvcoloca em uma sessão vi, na qual você pode modificar o script e, em seguida, :wqele é executado.

Walter Werner
fonte
11
Este pode ser um bom exemplo do uso do bash no vimodo, mas é um mau exemplo do código do bash. (1) Usar a saída lscomo entrada para qualquer outro tipo de processamento é uma má ideia. (2) A $(…)sintaxe para substituição de comando é amplamente considerada mais legível que a `…`sintaxe. (3) Você sempre deve citar variáveis ​​do shell, a menos que tenha um bom motivo para não fazê- lo e com certeza sabe o que está fazendo.
G-Man diz 'Restabelecer Monica'