Usando o vim em um ambiente de alta latência

4

Eu usei vim por anos e me sinto bastante proficiente com isso. No entanto, recentemente, tenho trabalhado em um servidor com um tempo de ping de 520 ms (Sydney para a África do Sul). Isso aumenta muito minha necessidade de usar o vim com mais eficiência. O que posso fazer para ajudar a aprender os atalhos que até agora nunca aprendi?

brianegge
fonte

Respostas:

3

Para usar o vim mais efetivamente, eu me concentraria em aprender mais sobre comandos de movimento especializados (parentes para mover por frase, chaves para mover por parágrafos). Eles podem ser combinados com os comandos de edição (excluir, alterar, etc.) quando você estiver familiarizado com eles. Além disso, aprenda as combinações "a" e "i" para selecionar (e aplicar comandos a) objetos ao redor do cursor (por exemplo, das para apagar a frase que o cursor está em: compare a (d), que possui três alternâncias Shift). Aprenda a aplicar contagens para movimentos maiores (por exemplo, c2w para mudar as próximas duas palavras, d2as para apagar a frase em que o cursor está e o próximo). Use marcas para pular para pontos usados ​​com freqüência.

Eu esqueci um dos meus comandos de movimento favoritos: f / t / F / T avançar ou retroceder (em minúsculas ou maiúsculas, respectivamente) para o próximo ou imediatamente antes do próximo caractere (f ou t, respectivamente) digitado: f* move-se para o próximo * para a direita, T( move-se apenas para a direita do próximo parêntese aberto para a esquerda (alterne para a esquerda e direita para configurações da direita para a esquerda).

Fazendo grandes mudanças

Para edições repetitivas, use a função de gravação de macro q gravar e @ para reproduzir sequências dos mesmos comandos.

Use registradores em vez de copiar e colar, ele salvará uma viagem de ida e volta (já que as macros são armazenadas em registros, você pode usar os comandos armazenar / recuperar registro para corrigir erros na macro sem regravar).

Use o :%s/…/…/g comando para fazer substituições / exclusões globais.


E se você ainda não conseguir que ele se sinta confortável, talvez seja possível fazer edições por meio do netrw plugin : vim scp://target/somefile.

Como akira notas abaixo, isso permite que você execute o Vim em sua máquina local, onde a latência não é um problema. Quando você edita um arquivo remoto, o Vim o copia para a sua máquina local. Quando você salva, o Vim copia de volta para a máquina remota. Suporta muitos protocolos (WebDAV, HTTP (somente leitura), FTP, SSH (scp, sftp), rsync).

Chris Johnsen
fonte
1
Este pequeno último parágrafo é a resposta mais valiosa até agora. apenas digitar menos não significa nada se entre uma tecla pressionada e a próxima for SEGUNDOS. só para deixar mais claro: via 'vi scp: // target / simefile' você edita em sua própria máquina, localmente e com ': w' você escreve no servidor ...
akira
@akira: Não aborda diretamente a questão real de como se tornar mais eficiente com o Vim, então eu acabei de colocá-lo no final. Se for aplicável à situação dos POs, suspeito que será uma das melhores soluções para o problema geral.
Chris Johnsen
1
Eu esperaria vim sftp://target/somefile para ser mais eficiente do que scp já que o sftp é realmente uma chamada aberta distante () ao invés de transferir o arquivo inteiro localmente, e permite gravar arquivos por partes.
ℝaphink
sim, verdade. mas eu sei de 'usuário' perguntas em primeira mão e eles principalmente perguntam algo com um problema em mente e eles pedem para sua própria 'solução' .. neste caso 'eu devo digitar menos então o atraso não importa'. O tópico em si justificaria uma resposta cobrindo apenas a solução netrw-imho, mas desde que você postou primeiro, eu quero que você escreva essa resposta :)
akira
3

Bem, vi foi escrito para links de modem lentos, então o Vi / Vim são possivelmente as melhores ferramentas para usar nesta situação.

O que eu sugiro é considerar qualquer coisa que você se repita e escrever macros para evitar a repetição.

Use: mapeie liberalmente e (porque é Vim), o recurso de gravação de macro 'q' ( :help recording ).

Faça uso de contagens repetidas (como você identificou) e use movimentos para navegar (como pesquisar e ir diretamente para números de linha) em vez de bater em h / j / k / l.

Então coisas como 5d descer 5 linhas, } para alcançar a próxima linha vazia, Ctrl-I e Ctrl-O para voltar / avançar pelas posições usadas recentemente no texto ( :help jumps ).

Além disso, considere baixar o (s) arquivo (s) e editá-lo localmente e, em seguida, faça o upload para o servidor.

njd
fonte
2

como outros já escreveram, o vim foi projetado especificamente com conexões lentas em mente, então você só precisa aprender a usá-lo de forma mais eficaz. você precisa aprender (e saber a diferença entre) A / A, F / T, I / I, ^, $, O / O, P / P, D / D etc. Eles são todos importantes e podem salvar você tem muitos movimentos.

Mas o maior problema da minha experiência é psicológico. você sabia que eventualmente será mais rápido, mas agora é mais rápido (e mais importante no cérebro :) só para usar as teclas do cursor :).

O que eu fiz para aprender vim eficaz é "me punir" toda vez que me vejo fazendo algo de forma ineficiente, voltando e refazendo o caminho certo de qualquer maneira.

Então, por exemplo, se você apenas "pegou" a si mesmo movendo 10 linhas para baixo com as teclas do cursor para trás e, em seguida, use smth como "10". ou mais importante, quase nunca usando as teclas de seta horizontais, use T, t, F, f, / ,? em vez de. e "punir" a si mesmo, refazendo novamente. você começará a fazer a coisa certa num instante.

Ah, e outra coisa a observar é o modo de seleção visual. 99% não é necessário, pois o mesmo pode ser feito de forma diferente.

Vitaly Kushner
fonte
0

Você já passou pelo tutorial introdutório do vim? Depois disso eu sugiro pegar uma folha de fraude e ter certeza que você pelo menos sabe o que cada item na folha de dicas está se referindo. Aprenda sobre o uso de expressões regulares na pesquisa e substituição. Aprenda sobre gravação e execução de macros. Aprenda sobre o modo visual e como você pode "canalizar" sua seleção para comandos externos e ler dados no comando externo.

myotherme
fonte
Eu fiz o tutorial, e eu costumava ter a folha de cola na minha mesa. No entanto, embora eu saiba que existem vários comandos, é difícil lembrar de usá-los. Eu tenho vários habbits ruins, como digitar xxxx ao invés de 4x.
brianegge
1
@brianegge algumas coisas só se aprende da maneira mais difícil ... mais algum tempo nessa máquina remota e você saberá melhor
Benjamin Bannier
0

Existe também uma opção chamada 'scrolljump' que controla quantas linhas para rolar quando o cursor se move para fora da tela. Isso pode ajudar a reduzir o quanto da tela precisa ser redesenhada.

Mas o plugin netrw, como mencionado por Chris Johnsen, é uma excelente solução, eu usei-o muitas vezes para fazer o desenvolvimento em conexões incrivelmente lentas e não confiáveis.

Neg_EV
fonte