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?

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 .


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)


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.


3

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

di"

Leia como deletar dentro de "


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.


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

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.