Como substituir texto entre aspas no vi

106

Digamos que eu tenha esta linha de código:

$query = "SELECT * FROM table";

Existe um comando no vi / vim que pode apagar instantaneamente tudo entre aspas e posicionar o cursor entre elas para que eu possa começar a digitar?

Nikola
fonte

Respostas:

182

Use ci", que significa: altere o que está dentro das aspas duplas.

Você também pode manipular outros objetos de texto de maneira semelhante, por exemplo:

  • ci' - mudança entre aspas simples
  • ciw - mudança dentro de uma palavra
  • ci( - mudar entre parênteses
  • dit - excluir dentro de uma tag HTML, etc.

Mais sobre os diferentes objetos de texto vim aqui .

Eugene Yarmash
fonte
2
Parece funcionar apenas com vim, mas NÃO vi. (Não tenho certeza)
Ivan Chau
Para mim, isso só funciona na linha atual, não em qualquer lugar do documento.
E finalmente
que comando faria isso ao contrário? Isso se você quiser substituir o texto entre aspas que está atrás do cursor.
dtburgess
1
@dtburgess: Uma maneira é F"ci".
Eugene Yarmash
ci 'e ci "funciona bem, mas ci (não funciona para mim. Alguém tem alguma ideia por quê?
Vram Vardanian
24

Você pode selecionar entre aspas e excluir ( d), alterar ( c) etc. usando

vi"

Da mesma forma, você pode substituir colchetes, colchetes, elementos XML etc., assim:

vi(
vi{
vit

ou simplesmente alterar / excluir, fazer o correspondente di", ci"etc. Substituir apor iirá englobar os elementos circundantes (então você marca ou altera os colchetes e o conteúdo, por exemplo)

Brian Agnew
fonte
5

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

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

É mais fácil de entender olhando para os 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 back (`).

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

Por favor, dê uma olhada na página do github no link acima para mais detalhes.

Anton Beloglazov
fonte
3

Já dentro das citações você pode fazer

di"

Leia como deletar dentro de "

Sam Peacey
fonte
6
O cursor não precisa estar dentro da string entre aspas, já que o padrão do comando é alterar a primeira string na linha
Eugene Yarmash
1
Obrigado, é muito bom saber! Só serve para mostrar que devo ler as coisas com um pouco mais de atenção. :)
Sam Peacey
3

Além da resposta de Brian, você também pode p(colar) e y(arrancar) o novo valor, então, se quiser substituir o valor entre aspas por outro valor, você pode fazer yi"na seleção que deseja copiar, vi"para selecionar a área que você deseja substituir e, em seguida, apenas psubstituir o valor corretamente.

Ulisses Caon
fonte
0

A resposta escolhida é adequada SOMENTE para ViM, mas NÃO para vi. A pergunta também é imprecisa porque o autor não mencionou qual é a posição inicial do cursor. Se assumirmos que o cursor está entre as aspas duplas, para vi a resposta será:

T"ct"

Onde:

T "- volte logo após o caractere"

c - comando de mudança

t "- fornece a posição final para o comando c, onde ele deve parar de apagar os caracteres, em outras palavras, o intervalo a ser alterado

usuário 1337
fonte