Usando o vim ao pressionar parênteses / colchetes de abertura e fechamento / etc

8

Quando aprendi a programar, pressionava os colchetes de abertura e fechamento / etc, depois a tecla de seta esquerda e depois inseria o texto. Então, para colocar, [hello]eu digitaria [], e então a seta esquerda para que ela fique sobre o primeiro colchete ( [).

Gosto disso porque sei que sempre tenho o número certo de colchetes / etc; caso contrário, sinto que minha mão precisa se mover para frente e para trás na tecla colchete / etc

Mas, mantendo a mentalidade do Vim, não quero buscar continuamente as teclas de seta. Existe algo que eu possa fazer que não envolva o uso das teclas de seta ou a necessidade de sair continuamente do modo de inserção para pressionar he voltar?

JZL003
fonte

Respostas:

5

Você pode estar procurando pelo plugin de pares automáticos :

Quando você digita um caractere como {, (ou [esse plug-in adiciona automaticamente o caractere simétrico e substitui o cursor no modo de inserção entre os dois colchetes. Ele também pode ser "inteligente" ao excluir esses caracteres.

Além disso, se eu puder lhe dar um conselho, esqueça as teclas de seta . Tudo o que você deseja fazer, sempre há um movimento mais rápido acessível sem mover as mãos da linha de casa. Pode levar algum tempo para se acostumar, mas uma vez que é um hábito, você nem sentirá falta deles.

statox
fonte
Obrigado pelo comentário e, se você não se importa que eu pergunte; você digita "[" então "olá" e depois "]". Sem os plugins de surround (que parece ser uma ótima idéia, obrigado) parece tipo de pesado para ir e voltar, mesmo sem o problema de potencialmente perder o número certo de suportes
JZL003
Bem, na verdade eu sempre usar tanto auto-pares ou surround.vim (ver a resposta de Pedro), mas se eu tivesse que fazer isso sem plug-ins, eu faria [, ] , <Esc>(que irá colocar o cursor na ] ) e, finalmente, ique será coloque o cursor entre os colchetes no modo de inserção.
statox
@statox no modo de inserção, como você move o cursor duas posições para a esquerda? Com ctrl-o 2h? Isso é mais rápido do que mover sua mão para os cursores? ;)
Vitor
@Vitor Nope, pressionarei a tecla Esc para entrar no modo normal; para um movimento de menos de 3 caracteres, provavelmente atingirei várias vezes hou, jcaso contrário, usarei outros movimentos. Ela se sente mais rápido para mim, mas eu entendo que algumas pessoas sentem-lo de uma forma diferente :)
statox
@statox depois de 10 anos usando o vim, ainda estou lutando para usar o hjkl e, especialmente, neste cenário que acabei de descrever. Obrigado por seus comentários! :)
Vitor
8

Existem muitos plugins "par" que fazem isso automaticamente para você. No entanto, todos eles me esfregam da maneira errada. Costumo usar o plugin surround.vim de Tim Pope . Eu faço o seguinte: <c-s>]no modo de inserção para inserir []com o cursor no meio dos colchetes.

Peter Rincker
fonte
mais pessoas precisam saber sobre isso, o vim surround é mais útil do que apenas embrulhar as coisas. Além disso, eu sinto o mal-estar par plugin, muito agressivo e acabam perdendo as teclas digitadas para o formato
rgalbo
4

Se você apenas precisar mover um espaço, ctrl-ono modo de inserção, sua próxima entrada será um comando normal, portanto ctrl-o, hvoltará um. A modelagem será exibida --- (insert) ---até você inserir o comando normal.

StarWeaver
fonte
2

O lh-brackets fornece mapeamentos de inserção, modo normal e visual para inserir par de colchetes.

Notas:

  • Adicionar novos pares de colchetes é bastante fácil.
  • Os mapeamentos do modo de inserção são sensíveis ao contexto - ou seja, não são expandidos em contextos de cadeia ou comentário, ...
  • Diferentemente do plugin surround, os mapeamentos circundantes são intuitivos, mas não no estilo vim. ou seja, bater (no modo visual será cercado (por padrão), não precisamos atingir si(sequências semelhantes.
Luc Hermitte
fonte
2

Respostas anteriores são muito boas. Mas acho que você pode querer algo mais fácil. Pessoalmente, eu uso h j k lpara me movimentar. Portanto, adicionei ao meu .vimrc o seguinte:

inoremap <c-j> <esc>ji
inoremap <c-k> <esc>ki
inoremap <c-h> <esc>i
inoremap <c-l> <esc>2li

Apenas uma pequena dica. Você disse que seu procedimento é i, [], <Esc>hi.

Há mapeamentos pendentes de operador, o que significa que você pode ci[ou di[ou ii[.

Patrick
fonte
1

Eu pessoalmente não sou um grande fã de inserção automagica de caracteres; você pode definir facilmente um conjunto de mapeamentos para inserir texto e mais o cursor para onde deseja:

" Add brackets with closing bracket
inoremap <C-a>[ []<Left>
inoremap <C-a>( ()<Left>

" For C & C-like languages
inoremap <C-a>{ {<Cr><Cr>}<Up>

" For Ruby
inoremap <C-a>def def<Cr>end<Up>

Observe que um plugin como o ultisnips também faz coisas assim, mas mais avançadas. Por exemplo, em Javascript, posso digitar:

if<Tab>hello

e eu recebo:

if (hello) {

}

Você pode adicionar um snippet simples para preencher os colchetes; este é um arquivo .snippet especial que reside em ~/.vim/UltiSnips/all.snippets:

snippet (
(${0})
endsnippet

snippet [
[${0}]
endsnippet

snippet {
{
${0}
}
endsnippet

${0} é a posição do cursor.

veja :help UltiSnips-adding-snippetspara mais informação.

Observe que o ultisnips requer Python; outro plugin bem conhecido é o vim-snipmate . O Wiki do Vim tem uma lista completa de plug-ins de trechos .

Martin Tournoij
fonte