Questão Vim Navigation no modo de inserção de forma eficaz


Eu sei que no modo de inserção eu poderia navegar pelo documento usando as teclas de seta ou usando Ctrl-o para escapar do modo de inserção temporariamente. Minha pergunta é: existe alguma outra maneira de navegar pelos documentos em vez de usar essas chaves ou fugir temporariamente?

Obrigado.

OK pessoal, acabei de encontrar uma solução para a minha própria pergunta em que eu uso imap para mapear chaves no Vim no modo de inserção.

 imap <C-n> <Down>
 imap <C-p> <Up>
 imap <C-@> <C-Space>

4


origem


O Vim é projetado para navegação no modo normal e inserção de texto no modo de inserção. Você será muito mais feliz e produtivo a longo prazo se aprender a usar o Vim da maneira que foi projetado para ser usado em vez de combatê-lo. Se você tentar por um tempo e achar que realmente não gosta de um editor modificado, você pode tentar o Emacs. É outro editor muito poderoso, mas permite navegar e editar sem alterar os modos. - garyjohn
se você não se importa com os modos, você poderia dar ... emacs ... um giro. arrepios - ash


Respostas:


Outro upvote para o comentário de @ garyjohn, aqui.

Ao seguir esse caminho, você certamente está atirando no próprio pé. Eu vejo pelo menos dois grandes erros em sua abordagem.

  • Como @garyjohn escreveu, você está "lutando" contra o aspecto mais crucial do Vim. A modalidade está no centro de tudo o que torna o editor de texto incrível que é. Se você considerar sua curva de aprendizado proverbialmente íngreme, ativamente indo contra o seu design não vai chegar muito longe.

  • Gostar muitos outros, você se concentra seu esforço "emburrecer Vim" em movimentos como <up>, <down> e amigos. Vim tem muito melhor maneiras de se movimentar entre buffers: wWeEbB/?tTfF{}[] e assim por diante. Todos esses movimentos lhe dão super poderes. Todos esses movimentos depender na modalidade de uma forma ou de outra.

    Rejeitar essas ferramentas incrivelmente úteis é um erro muito ruim por si só. Remapear os dois seria muito difícil e totalmente inútil.

    Para começar, quando comecei o Vim, passei meses tentando transformá-lo em um clone do TextMate. Tentar criar mapeamentos de modo de inserção para tudo foi provavelmente um dos esforços mais frustrantes de toda a minha carreira. Eu aprendi duas coisas no processo, no entanto:

    1. meu amado TextMate foi seriamente fraco em comparação com o Vim por isso não fazia absolutamente nenhum sentido para emburrecer Vim, e…

    2. Modos regra freaking.

Aceite a filosofia do Vim em vez de rejeitá-lo. Ou rejeite-o e use o Sublime Text 2, para o que nos interessa.


4





Eu concordo com @garyjohn - além disso, Ctrl-n e Ctrl-p são coisas que eu uso para autocompletar ou completar a ortografia automática - eu não iria mapeá-las para outra coisa. Tudo o mesmo, Ctrl-W irá apagar uma palavra antes do cursor, e Ctrl-você irá apagar tudo antes do cursor, então pelo menos você poderia usar esses atalhos (que também funcionam em um shell).


3



Outra razão para evitar abusar do modo de inserção (ou seja, ao usá-lo o tempo todo) é que o usuário estaria evitando a funcionalidade padrão de desfazer / refazer do Vim. Por exemplo, se você fizer uma série de alterações no modo de inserção, vá para o normal e desfaça com u, você irá desfazer todas as alterações feitas. Além disso, Ctrl-u no modo de inserção não é facilmente refazível (ao contrário dos comandos de exclusão do modo normal). O usuário ainda pode confiar :earlier e :later mas perde granularidade na árvore de desfazer a menos que Ctrl-G  u Vejo vim.wikia.com/wiki/Using_undo_branches - Andy Mo


Apenas para martelar esta casa: Se você ficar no modo de inserção por muito tempo, você está fazendo algo errado. O padrão em Vi (m) é: Movimente-se no modo normal. Faça inserções curtas (uma palavra aqui, uma frase lá). Ou manipule o texto com comandos Ex como :substitute. Repetir.

Tente ensinar-se a deixar o modo de inserção (via <Esc>, convenientemente acessível em seu teclado) assim que o fluxo de caracteres vindos do seu cérebro começar a escorrer. A próxima inserção é apenas uma i / a longe.


3





Se você quiser mover mais de uma ou duas posições ...

... a melhor escolha é acertar ESC, mova-se e volte ao modo de inserção novamente.

Não faz sentido criar mapeamentos como <C-h> para mover para a esquerda e, em seguida, começar a bater muitas vezes ... como um usuário do vim, você não deve pressionar a mesma tecla várias vezes para obter um movimento inteligente.

(Se o ESC a chave não está perto dos seus dedos, seria uma boa opção criar um mapeamento para ela.)

Se você quiser mover ONE ou DOIS posistions no modo de inserção ...

... uma boa escolha seria definir alguns movimentos usando o seu <Leader> chave:

(Eu uso , Como <Leader> chave desde que é se sente perto e confortável para os meus dedos)

noremap! <Leader>h <left>   "move cursor left
noremap! <Leader>j <down>   "move cursor down
noremap! <Leader>k <up>     "move cursor up   
noremap! <Leader>l <right>  "move cursor right
noremap! <Leader>w <esc>wi  "move one word forward
noremap! <Leader>e <esc>ei  "move forward to the end of word
noremap! <Leader>b <esc>bi  "move one word backward

0