web-dev-qa-db-fra.com

Comment remplacer du texte entre guillemets dans vi

Disons que j'ai cette ligne de code:

$query = "SELECT * FROM table";

Existe-t-il une commande dans vi/vim permettant de supprimer instantanément tout ce qui se trouve entre guillemets et de positionner le curseur entre eux afin que je puisse commencer à saisir?

91
Nikola

Utilisez ci", ce qui signifie: changez le contenu des guillemets. 

Vous pouvez également manipuler d’autres objets texte de la même manière, par exemple:

  • ci' - changer à l'intérieur des guillemets simples
  • ciw - changer à l'intérieur d'un mot 
  • ci( - changer entre parenthèses
  • dit - supprime une balise HTML, etc.

En savoir plus sur les différents objets texte vim ici .

148
Eugene Yarmash

Vous pouvez choisir entre guillemets puis supprimer (d), modifier (c) etc. à l’aide de

vi"

De même, vous pouvez substituer des accolades, des crochets, des éléments XML, etc. ainsi:

vi(
vi{
vit

ou pour simplement changer/supprimer, effectuez les opérations suivantes: di", ci" etc. En remplaçant a par i, vous engloberez les éléments environnants (pour marquer ou modifier le contenu des crochets et, par exemple).

21
Brian Agnew

J'ai créé un plugin vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Il fournit des objets texte pour les paires de guillemets les plus proches, quel que soit leur type, et prend en charge les guillemets couvrant plusieurs lignes. En utilisant uniquement iq ou aq, il vous permet d’opérer sur le contenu des guillemets simples ('), doubles (") ou arrières (`) entourant actuellement le curseur, devant En d’autres termes, il saute en avant ou en arrière au besoin pour atteindre les guillemets. 

C'est plus facile à comprendre en regardant des exemples (le curseur est montré avec |):

  1. Avant: foo '1, |2, 3' bar; après avoir appuyé sur diq: foo '|' bar
  2. Avant: foo| '1, 2, 3' bar; après avoir appuyé sur diq: foo '|' bar
  3. Avant: foo '1, 2, 3' |bar; après avoir appuyé sur diq: foo '|' bar
  4. Avant: foo '1, |2, 3' bar; après avoir appuyé sur daq: foo | bar
  5. Avant: foo| '1, 2, 3' bar; après avoir appuyé sur daq: foo | bar
  6. Avant: foo '1, 2, 3' |bar; après avoir appuyé sur daq: foo | bar

Les exemples ci-dessus sont donnés pour des guillemets simples, le plugin fonctionne exactement de la même manière pour les guillemets doubles (") et back (`). 

Vous pouvez également utiliser n'importe quel autre opérateur: ciq, diq, yiq, viq, etc.

Veuillez consulter la page github liée ci-dessus pour plus de détails.

4
Anton Beloglazov

Deja dans les citations que vous pouvez faire 

di"

Lire comme supprimer à l'intérieur "

3
Sam Peacey

En plus de la réponse de Brian, vous pouvez aussi p (coller) et y (yank) la nouvelle valeur. Ainsi, si vous voulez remplacer la valeur entre guillemets par une autre valeur, vous pouvez utiliser yi" pour la sélection que vous souhaitez copier, vi". pour sélectionner la zone que vous souhaitez remplacer, puis p pour remplacer correctement la valeur.

0
Ulisses Caon