Como selecionar entre colchetes (ou aspas ou…) no Vim?

219

Tenho certeza de que costumava haver um plug-in para esse tipo de coisa, mas agora que eu preciso dele, não consigo encontrá-lo (naturalmente), então vou pedir de maneira simples e agradável.

Qual é a maneira mais fácil de selecionar entre colchetes, aspas ou geralmente uma lista de caracteres correspondentes?

   write ( *, '(a)' ) 'Computed solution coefficients:'

Por exemplo, aqui eu gostaria de selecionar (a), ou Computed solution coefficients:.

Não estou interessado em várias linhas, apenas casos que ocorrem em uma linha.

Torre
fonte

Respostas:

276

Use qualquer tecla de navegação que você queira entrar entre parênteses e, em seguida, use yi(ou yi)para copiar tudo dentro dos parênteses correspondentes. Isso também funciona com colchetes (por exemplo yi]) e chaves. Além disso y, você também pode excluir ou alterar o texto (por exemplo ci), di]).

Eu tentei isso com aspas duplas e simples e parece funcionar lá também. Para seus dados, eu faço:

write (*, '(a)') 'Computed solution coefficients:'

Mova o cursor para Ce digite yi'. Mova o cursor para uma linha em branco, pressione pe obtenha

Computed solution coefficients:

Como CMS observou , isso funciona para seleção de modo visual, bem como - uso apenas vi), vi}, vi', etc.

Tim Whitcomb
fonte
1
Geralmente, estou procurando uma maneira de selecionar tudo entre caracteres correspondentes predefinidos (normalmente apenas aspas simples e duplas e colchetes de todos os tipos).
Rook
2
O que você quer dizer com palavras separadas? Eu tentei-o em "[x, y, z]" e escolheu "x, y, z"
Tim Whitcomb
4
Desconsidere o último comentário - encontrou qual era o problema. Funciona como um encanto :-)
Rook
Parece que funciona com citações bem yi"selecionar todas as citações withing
stefanB
ci(ou ci)faz pelo que eu estava procurando. Obrigado. Eu ainda não entendo completamente o icaso, mas quem se importa desde que funcione, certo? :)
justnorris
279

Para selecionar entre aspas simples, costumo fazer um vi' ("selecionar aspas simples internas").

Dentro de um bloco de parênteses, eu uso vib ("selecione o bloco interno")

Dentro de um bloco de chaves você pode usar viB("capital B")

Para fazer as seleções "inclusivas" (selecione também as aspas, parênteses ou chaves), você pode usar em avez de i.

Você pode ler mais sobre as seleções de objeto de texto no manual ou :help text-objectsno vim.

CMS
fonte
obrigado por essa dica, tenho procurado e solicitado algo semelhante e não estava satisfeito com meus resultados. Impressionante.
Alfredodeza
Essa dica é muito simples e fácil de comprometer dentro da minha memória cerebral e muscular. obrigado.
precisa
Esta é uma dica muito útil. Não há mais confusão com as teclas extras. Obrigado pelo link.
Rai
27

Esse método de seleção é interno e bem coberto na ajuda do Vim. Abrange tags XML e muito mais.

Veja :help text-objects.

Michael
fonte
1
: texto de ajuda-objetos se aproxima do material útil ... você poderia pelo menos mencionar alguns dos mais comuns, como um" e um (quando no modo visual.
Stobor
2
(Além disso, +1 porque apesar de ser um usuário vim de longa data, eu não sabia sobre estes!)
Stobor
@Stobor. Felicidades fixo que referência
michael
21

Para selecionar entre aspas simples, use vi'.

Para selecionar entre parênteses, use vi(.

Canopus
fonte
3
Nota: ci'ou ci(para alterar em vez de selecionar visualmente. Mas faz exatamente o que eu queria. Obrigado :)
justnorris
O segundo só funciona quando dentro desse bloco (), então normalmente eu faço %vi(ou%vib
816-8055
7

Use as setas ou hjklpara chegar a uma das expressões de bracketing, depois vselecione o modo visual (ou seja, selecionando) e depois %pule para o outro colchete.

Stobor
fonte
5
(não faz aspas, infelizmente, no entanto ...) #
Stobor
3

Escreva uma função Vim em .vimrc usando a função interna searchpair:

searchpair({start}, {middle}, {end} [, {flags} [, {skip}
            [, {stopline} [, {timeout}]]]])
    Search for the match of a nested start-end pair.  This can be
    used to find the "endif" that matches an "if", while other
    if/endif pairs in between are ignored.
    [...]

( http://vimdoc.sourceforge.net/htmldoc/eval.html )

Adrian Panasiuk
fonte
2

Eu acrescentaria um detalhe à resposta mais votada:

Se você estiver usando o gvim e quiser copiar para a área de transferência, use

"+<command>

Para copiar todo o conteúdo entre colchetes (ou parênteses ou colchetes)

Por exemplo: "+yi}copiará para a área de transferência todo o conteúdo entre os colchetes do seu cursor.

yuriploc
fonte
2
Isso é completamente ortogonal ao problema e não deve ser uma resposta. Você pode escrever isso em todas as perguntas que forem feitas y.
pipe
Esta é uma adição à resposta, não uma resposta em si.
Yuriploc 13/10/1918
Então deve ser uma edição para essa resposta, este post como está não responde à pergunta.
pipe
Este é um anúncio para NÃO usar o gvim :) Quem precisa de mais dois turnos + pressionamentos de tecla em sua vida?
Paul Parker
1

Eu criei um plugin vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Ele fornece objetos de texto para os pares de cotações mais próximos de qualquer tipo. Usar apenas iqou aqpermitir que você opere no conteúdo de aspas simples ('), duplas (") ou invertidas (`) que atualmente cercam o cursor, estão na frente do cursor ou atrás (nessa ordem de preferência) Em outras palavras, ele pula para frente ou para trás quando necessário para alcançar as aspas.

É mais fácil entender olhando para exemplos (o cursor é mostrado com |):

  1. Antes foo '1, |2, 3' bar:; depois de pressionar diq:foo '|' bar
  2. Antes foo| '1, 2, 3' bar:; depois de pressionar diq:foo '|' bar
  3. Antes foo '1, 2, 3' |bar:; depois de pressionar diq:foo '|' bar
  4. Antes foo '1, |2, 3' bar:; depois de pressionar daq:foo | bar
  5. Antes foo| '1, 2, 3' bar:; depois de pressionar daq:foo | bar
  6. Antes foo '1, 2, 3' |bar:; depois de pressionar daq:foo | bar

Os exemplos acima são dados para aspas simples, o plugin funciona exatamente da mesma maneira para aspas duplas (") e de volta (`).

Você também pode usar quaisquer outros operadores: ciq, diq, yiq, viq, etc.

Veja a página do github vinculada acima para obter mais detalhes.

Anton Beloglazov
fonte
-6

Um mapa de teclas simples no vim resolveria esse problema. map viq F ”lvf” hh Este comando acima mapeia o viq para as teclas para pesquisar entre aspas. Substitua "por qualquer caractere e crie seus mapas de teclas. Coloque isso no vimrc durante a inicialização e você poderá usá-lo sempre.


fonte