Question

Comment puis-je rapidement citation / mots Unquote et le changement citant (par exemple de ' à ") dans vim? Je sais que sur le plugin surround.vim , mais je voudrais simplement utiliser Vim.

Était-ce utile?

La solution

surround.vim va être votre réponse la plus facile. Si vous êtes vraiment IMPUTATION l'utiliser, voici quelques exemples pour ce que vous pouvez faire. Pas nécessairement le plus efficace, mais c'est pourquoi surround.vim a été écrit.

  • Citation un mot, en utilisant des guillemets simples
    ciw'Ctrl+r"'
    • ciw -. Supprimer le mot le curseur est sur, et finissent par en mode d'insertion
    • ' - ajouter la première citation
    • .
    • Ctrl+r" - Insérer le contenu du registre ", alias le dernier coup sec / supprimer
    • .
    • ' - ajouter la citation de clôture.
  • Ils ont dit un mot qui est enfermé dans des guillemets simples
    di'hPl2x
    • di' -. Supprimer le mot entre guillemets simples
    • hP -. Déplacez le curseur à gauche un endroit (au-dessus de la citation d'ouverture) et mettre le texte juste supprimé avant la citation
    • l -. Déplacez le curseur vers la droite un endroit (au-dessus de la citation d'ouverture)
    • 2x - Supprimer les deux citations.
  • Modifier les guillemets simples à guillemets doubles
    va':s/\%V'\%V/"/g
    • va' - sélectionner visuellement le mot cité et les citations
    • .
    • :s/ -. Démarrer un remplacement
    • \%V'\%V - correspondent uniquement des guillemets simples qui se trouvent dans la région sélectionnée visuellement
    • .
    • /"/g - Remplacez-les par des guillemets doubles
    • .

Autres conseils

  

Citation un mot, en utilisant des guillemets simples

     

ciw'Ctrl+r"'

Il était plus facile de le faire de cette façon

ciw '' Esc P

Voici quelques mapping 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 ne l'avez pas changé la variable mapleader, puis activer la mise en correspondance avec \q" \q' ou \qd. Ils ajoutent des guillemets doubles autour du mot sous le curseur, guillemet simple autour du mot sous le curseur, supprimez toutes les guillemets autour du mot sous le curseur respectivement.

En plus des autres commandes, cela enfermer tous les mots dans une ligne entre guillemets (selon votre commentaire)

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

ou si vous voulez réduire le nombre de barres obliques inversées, vous pouvez mettre un modificateur \v (très magique) au début du motif

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

Pour envelopper dans des guillemets simples (par exemple) fonctionne ciw'<C-r>"'<esc>, mais répétition ne fonctionnera pas. Essayez:

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

Cela met le contenu de la valeur par défaut enregistrer « littéralement ». Maintenant, vous pouvez appuyer sur . sur un mot pour l'envelopper dans des guillemets. Pour en savoir plus voir :h[elp] i_ctrl-r et plus sur les objets texte à :h text-objects

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

La façon de macros

  1. appuyez sur q et q pour l'enregistrement dans le registre q (nous utilisons "q" comme raccourci pour se souvenir "guillemets").

  2. sur déplacer + b déplacer le curseur vers l'avant du mot en cours

  3. sur i type ' (un seul guillemets)

  4. appuyez sur esc puis appuyez sur e pour passer à la fin du mot

  5. appuyez sur a puis appuyez sur ' pour entourer le mot avec des guillemets.

  6. enfin appuyez sur q pour l'enregistrer dans le registre de q.

Comment l'utiliser:

  1. Placez le curseur sur un mot désiré.
  2. Appuyez sur @ q pour entourer un mot avec des guillemets.
  3. Appuyez sur @ @ si vous voulez répéter dans un autre mot.

Vous pouvez modifier step 4 avec tout ce que vous aimez {une ligne, un mot jusqu'à un certain caractère trouvé, etc.}. Mettez-la dans vim variables et .vimrc répéter votre bonheur.

Je ne sais pas commande vim builtin pour cela, mais en utilisant r"f'r" pour passer de « à « et r'f"r' pour passer de » à » fonctionne si vous tenez le premier "ou ». La commande r' remplace tout caractère sous votre curseur avec », et f" vous avance à l'autre ».

Pour les utilisateurs de VSCodeVim que vous pouvez faire

vwS"

  • Vous pouvez remplacer " avec tout ce que vous voulez envelopper par.
  • Vous pouvez remplacer w avec tout autre opérateur de sélection

Ajout Citations

Je commencé à utiliser cette fonction rapide et sale dans .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 visuellement sélectionnez tout ce que je veux (généralement via viw - visuellement sélectionnez à l'intérieur mot ) entre guillemets et appuyez sur Q pour des guillemets doubles, ou appuyez sur q pour des guillemets simples.

Suppression Quotes

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

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

J'utilise vim-textobj guillemets pour vim traite des citations comme des objets texte . Cela signifie que je peux faire vaq (visuellement sélectionnez autour de citations . Ceci trouve les citations les plus proches et les sélectionne visuellement. (Cette option est facultative, vous pouvez juste faire quelque chose comme f"vww). Ensuite, je presse s bande les citations de la sélection.

Modification Citations

KISS. I supprimer les citations puis ajouter des guillemets . Par exemple, pour remplacer des guillemets simples avec des guillemets doubles, j'effectuer les étapes: 1. supprimer les guillemets simples: vaqs, 2. ajouter de nouvelles citations: vwQ.


Voici quelques applications simples qui peuvent être utilisés pour citer et CITATION 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>

J'utilise nnoremap dans mon .vimrc

Pour guillemet simple un mot:

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

Pour supprimer les citations (fonctionne sur des guillemets doubles ainsi):

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

Règle à retenir:. 'Carrés' = guillemet simple

VIM pour vscode le fait awsomely. Il est basé un vim surround si vous n'utilisez pas vscode.

  

Voici quelques exemples:

     

"test" avec le curseur entre guillemets de type cs " » pour finir avec 'test'

     

"test" avec le curseur entre guillemets de type ds » pour finir avec le test

     

« test » avec le curseur entre guillemets de type cs "t et entrez 123> pour finir   avec <123> test

     

test avec le curseur sur le type de test de mot ysaw) pour aboutir à (test)

que diriez-vous?

 :%s/\'/"/g

J'ai écrit un script qui fait cela:

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 utiliser, il suffit mettre en évidence quelque chose, je contrôle frappé, puis tapez un caractère. Si c'est l'un des personnages de la fonction a connaissance, il va fournir le bon caractère de terminaison. Si ce n'est pas, il utilisera le même caractère pour insérer des deux côtés.

Surround.vim peut faire plus que cela, mais cela était suffisant pour mes besoins.

Exemple de carte de mode visuel pour ajouter des guillemets simples autour d'un bloc de texte sélectionné:

:vnoremap qq <Esc>`>a'<Esc>`<i'<Esc>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top