web-dev-qa-db-fra.com

Quelle (s) commande (s) Vim peut être utilisée pour citer/ne pas citer de mots?

Comment puis-je rapidement citer/dé-citer des mots et changer de citation (par exemple de ' à ") dans Vim? Je connais le plugin surround.vim , mais j’aimerais utiliser uniquement Vim. 

166
Eugene Yarmash

surround.vim va être votre réponse la plus simple. Si vous êtes vraiment opposé à son utilisation, voici quelques exemples de ce que vous pouvez faire. Pas nécessairement le plus efficace, mais c'est pourquoi surround.vim a été écrit.

  • Citer un mot en utilisant des guillemets simples
    ciw'Ctrl+r"'
    • ciw - Supprime le mot sur lequel se trouve le curseur et termine en mode insertion.
    • ' - ajoute le premier devis.
    • Ctrl+r" - Insérez le contenu du registre ", c'est-à-dire le dernier yank/delete.
    • ' - ajoute la citation de clôture .

  • Annuler la citation d'un mot entre guillemets simples
    di'hPl2x
    • di' - Supprimer le mot entre guillemets simples.
    • hP - Déplacez le curseur d'une position vers la gauche (en haut du devis d'ouverture) et placez le texte qui vient d'être supprimé avant le devis.
    • l - Déplace le curseur d'une position vers la droite (en haut du guillemet d'ouverture).
    • 2x - Supprimer les deux guillemets .

  • Changer les guillemets simples en guillemets doubles
    va':s/\%V'\%V/"/g
    • va' - Sélectionnez visuellement le mot cité et les guillemets.
    • :s/ - Commencez un remplacement.
    • \%V'\%V - Ne correspond aux guillemets simples que dans la région sélectionnée visuellement.
    • /"/g - Remplacez-les tous par des guillemets doubles.
209
jamessan

Citer un mot en utilisant des guillemets simples

ciw'Ctrl+r"'

C'était plus facile pour moi de le faire de cette façon

ciw '' Esc P
164
installero

Voici une cartographie qui pourrait aider:

:nnoremap <Leader>q" ciw""<Esc>P
:nnoremap <Leader>q' ciw''<Esc>P
:nnoremap <Leader>qd daW"=substitute(@@,"'\\\|\"","","g")<CR>P

Si vous n'avez pas modifié la variable mapleader, activez le mappage avec \q"\q' ou \qd. Ils ajoutent des guillemets doubles autour du mot sous le curseur, des guillemets simples autour du mot sous le curseur, suppriment les guillemets autour du mot sous le curseur.

25
Geoff Reedy

En plus des autres commandes, tous les mots d’une ligne seront placés entre guillemets (selon votre commentaire).

:s/\(\S\+\)/"\1"/

ou si vous souhaitez réduire le nombre de barres obliques inverses, vous pouvez utiliser un modificateur \v (très magique) au début du motif.

:s/\v(\S+)/"\1"/
23
Matteo Riva

Pour insérer des guillemets simples (par exemple), ciw'<C-r>"'<esc> fonctionne, mais repeat ne fonctionnera pas. Essayer:

ciw'<C-r><C-o>"'<esc>

Cela met le contenu du registre par défaut "littéralement". Vous pouvez maintenant appuyer sur . sur n’importe quel mot pour le mettre entre guillemets. Pour en savoir plus, voir :h[elp] i_ctrl-r et plus d’informations sur les objets texte à :h text-objects

Source: http://vimcasts.org/episodes/pasting-from-insert-mode/

16
James Scriven

à la manière des macros

  1. presse q et q pour enregistrer dans le registre q (nous utilisons "q" comme raccourci pour nous rappeler les "guillemets").

  2. presse shift + b déplace le curseur devant le mot actuel

  3. presse i type ' (une seule citation)

  4. presse esc puis appuyez e passer à la fin de Word

  5. presse a puis appuyez ' à nouveau pour entourer le mot avec des guillemets.

  6. enfin appuyez sur q pour l’enregistrer dans q register.

Comment l'utiliser:

  1. Déplacez le curseur sur le mot souhaité.
  2. Presse @q entourer un mot avec des guillemets.
  3. Presse @@ si vous voulez le répéter dans un autre mot.

Vous pouvez modifier step 4 avec tout ce que vous voulez {une ligne, un Word jusqu'à ce que vous trouviez un caractère, etc.}. Mettez-le dans vim variables et .vimrc pour répéter votre bonheur.

10
Brain90

Je ne connais aucune commande vim intégrée pour cela, mais utiliser r"f'r" pour changer de 'à "et r'f"r' pour changer de" à "fonctionne si vous vous tenez sur le premier ou le". La commande r' remplace le caractère sous votre curseur. avec ', et f" vous fait passer au suivant ".

5
Håvard S

Ajout de citations

J'ai commencé à utiliser cette fonction rapide et sale dans mon .vimrc:

vnoremap q <esc>:call QuickWrap("'")<cr>
vnoremap Q <esc>:call QuickWrap('"')<cr>

function! QuickWrap(wrapper)
  let l:w = a:wrapper
  let l:inside_or_around = (&selection == 'exclusive') ? ('i') : ('a')
  normal `>
  execute "normal " . inside_or_around . escape(w, '\')
  normal `<
  execute "normal i" . escape(w, '\')
  normal `<
endfunction

Alors maintenant, je sélectionne visuellement tout ce que je veux (généralement via viw - sélection visuelle dans Word ) entre guillemets et appuyez sur Q pour les guillemets doubles, ou appuyez sur q pour les guillemets simples.

Suppression des devis

vnoremap s <esc>:call StripWrap()<cr>

function! StripWrap()
  normal `>x`<x
endfunction

J'utilise vim-textobj-quotes pour que vim traite les guillemets comme des objets texte. Cela signifie que je peux faire vaq (sélectionner visuellement autour des guillemets . Ceci recherche les citations les plus proches et les sélectionne visuellement. (Ceci est facultatif, vous pouvez simplement faire quelque chose comme f"vww). appuyez sur s pour supprimer les guillemets de la sélection.

Modification des devis

BAISER. I supprime les guillemets puis ajoute des guillemets . Par exemple, pour remplacer les guillemets simples par des guillemets doubles, procédez comme suit: 1. supprimez les guillemets simples: vaqs, 2. ajoutez de nouveaux guillemets: vwQ.


4
James Lawson

Pour les utilisateurs de VSCodeVim, vous pouvez faire 

vwS" 

  • Vous pouvez remplacer " par tout ce qui vous intéresse.
  • Vous pouvez remplacer w par n’importe quel autre opérateur de sélection
2
Janac Meena

Voici quelques mappages simples qui peuvent être utilisés pour citer ou non un mot:

" 'quote' a Word
nnoremap qw :silent! normal mpea'<Esc>bi'<Esc>`pl
" double "quote" a Word
nnoremap qd :silent! normal mpea"<Esc>bi"<Esc>`pl
" remove quotes from a Word
nnoremap wq :silent! normal mpeld bhd `ph<CR>
2
Alex Falcucci

VIM pour vscode est-ce génial? C'est basé sur un vim-surround si vous n'utilisez pas vscode.

Quelques exemples:

"test" avec le curseur entre guillemets tapez cs "'pour finir avec' test '

"test" avec le curseur entre guillemets tapez ds "pour finir avec test

"test" avec le curseur entre guillemets, tapez cs "t et entrez 123> pour terminer avec <123> test

test avec curseur sur Word test type ysaw) pour finir avec (test)

1
Lev

J'utilise nnoremap dans mon .vimrc

Pour citer un mot:

nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl

Pour supprimer les guillemets (fonctionne également sur les guillemets doubles):

nnoremap qs :silent! normal mpeld bhd `ph<CR>

Règle à retenir: 'sq' = guillemet simple.

1
Niko Riitala

J'ai écrit un script qui fait ceci:

function! WrapSelect (front)
    "puts characters around the selected text.
    let l:front = a:front
    if (a:front == '[')
        let l:back = ']'
    elseif (a:front == '(')
        let l:back = ')'
    elseif (a:front == '{')
        let l:back = '}'
    elseif (a:front == '<')
        let l:back = '>'
    elseif (a:front =~ " ")
        let l:split = split(a:front)
        let l:back = l:split[1]
        let l:front = l:split[0]
    else
        let l:back = a:front
    endif
    "execute: concat all these strings. '.' means "concat without spaces"
    "norm means "run in normal mode and also be able to use \<C-x> characters"
    "gv means "get the previous visual selection back up"
    "c means "cut visual selection and go to insert mode"
    "\<C-R> means "insert the contents of a register. in this case, the
    "default register"
    execute 'norm! gvc' . l:front. "\<C-R>\""  . l:back
endfunction
vnoremap <C-l> :<C-u>call WrapSelect(input('Wrapping? Give both (space separated) or just the first one: '))<cr>

Pour l'utiliser, il suffit de surligner quelque chose, d'appuyer sur le contrôle l, puis de saisir un caractère. Si la fonction est au courant de l'un des caractères, elle fournira le caractère de fin correct. Si ce n'est pas le cas, le même caractère sera inséré des deux côtés.

Surround.vim peut faire plus que cela, mais cela suffisait à mes besoins.

0
jeremysprofile

que dis-tu de ça? 

 :%s/\'/"/g
0
ghostdog74