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.

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.


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.


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.


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(.


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.


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 )


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.


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.


-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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.