Frage

Wie kann ich schnell Zitat / unquote Worte und Veränderung zitieren (beispielsweise von ' zu ") in Vim? Ich weiß um die surround.vim Plugin, aber ich möchte nur Vim verwenden.

War es hilfreich?

Lösung

surround.vim wird Ihre einfachste Antwort sein. Wenn Sie wirklich eingestellt sind dagegen mit, hier sind einige Beispiele für das, was Sie tun können. Nicht unbedingt die effizienteste, aber das ist, warum surround.vim geschrieben wurde.

  • Zitat ein Wort, mit einfachen Anführungszeichen
    ciw'Ctrl+r"'
    • ciw -. Löschen Sie das Wort der Cursor befindet, und im Einfügemodus am Ende
    • ' -. Fügen Sie das erste Zitat
    • Ctrl+r" -. Fügen Sie den Inhalt des Registers ", auch bekannt als der letzte Ruck / Löschen
    • ' - fügen Sie den Schlusskurs.
  • Unquote ein Wort, das in einfachen Anführungszeichen eingeschlossen
    di'hPl2x
    • di' -. Löschen Sie das Wort in Apostrophen
    • hP -. Bewegen Sie den Cursor eine Stelle nach links (auf der Oberseite der Öffnung Zitat) und setzen Sie den gerade gelöschten Text vor dem Zitat
    • l -. Bewegen Sie den Cursor eine Stelle nach rechts (auf der Oberseite der Öffnung Zitat)
    • 2x - Löschen Sie die beiden Zitate.
  • Ändern einfache Anführungszeichen doppelte Anführungszeichen
    va':s/\%V'\%V/"/g
    • va' -. Visuell wählen Sie das zitierte Wort und die Anführungszeichen
    • :s/ -. Starten Sie einen Ersatz
    • \%V'\%V -. Nur einfache Anführungszeichen entsprechen, die in der visuell ausgewählten Region sind
    • /"/g -. Ersetzen sie alle mit doppelten Anführungszeichen

Andere Tipps

  

Zitat ein Wort, mit einfachen Anführungszeichen

     

ciw'Ctrl+r"'

Es war leichter für mich, es auf diese Weise zu tun

ciw '' Esc P

Hier ist ein Mapping, das helfen könnte:

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

Wenn Sie nicht die mapleader Variable geändert haben, aktivieren Sie dann die Zuordnung mit \q" \q' oder \qd. Sie fügen hinzu, doppelte Anführungszeichen um das Wort unter dem Cursor, Apostroph um das Wort unter dem Cursor, löschen Sie alle Anführungszeichen um das Wort unter dem Cursor auf.

Zusätzlich zu den anderen Befehlen, diese werden alle Wörter in einer Zeile in doppelte Anführungszeichen ein (wie pro Ihren Kommentar)

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

oder wenn Sie die Anzahl der Schrägstriche reduzieren möchten, können Sie eine \v setzen (sehr Magie) Modifikator zu Beginn des Musters

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

Um in einfachen Anführungszeichen wickeln (zum Beispiel) ciw'<C-r>"'<esc> funktioniert, aber Wiederholung wird nicht funktionieren. Versuchen Sie:

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

Damit ist der Inhalt des Standardregisters „buchstäblich“. Jetzt können Sie . auf ein beliebiges Wort drücken es in Anführungszeichen zu wickeln. Um mehr zu erfahren sehen :h[elp] i_ctrl-r und mehr über Textobjekte in :h text-objects

Quelle: http://vimcasts.org/episodes/pasting-from-insert -Mode /

Die Makros Art und Weise

  1. drücken Sie q und q für die Aufnahme in die q-Register (wir verwenden "q" als Abkürzung "Anführungszeichen" zu erinnern).

  2. Drücken Verschiebung + b Cursor bewegen, um vor dem aktuellen Wort

  3. drücken Sie i type ' (ein einzelnes Anführungszeichen)

  4. drücken Sie esc dann drücken Sie e , um des Wortes zu beenden

  5. drücken Sie a dann drücken Sie ' erneut das Wort mit Anführungszeichen zu umgeben.

  6. schließlich drücken Sie q es in q Register aufzunehmen.

Wie man es verwendet:

  1. Bewegen Sie den Cursor auf eine gewünschte Wort.
  2. Drücken Sie @ q umgibt ein Wort mit Anführungszeichen.
  3. Drücken Sie @ @ , wenn Sie es in ein anderes Wort wiederholen möchten.

Sie können step 4 mit etwas ändern Sie {eine Linie, ein Wort, bis einige Zeichen gefunden, etc}. Legen Sie es in vim variables und .vimrc Ihr Glück zu wiederholen.

Ich kenne keinen builtin vim Befehl für diese, aber mit r"f'r" zu Wechsel von ‚zu‚und r'f"r' zu Wechsel von‘zu‘ funktioniert, wenn Sie auf dem ersten Stand "oder“. Den Befehl r' ersetzt, was auch immer Zeichen unter dem Cursor mit‘und f" bewegt man sich auf die nächste“.

Für Benutzer von VSCodeVim können Sie tun,

vwS"

  • Sie können " ersetzen mit dem, was Sie wickeln möchten.
  • Sie können w mit einem anderen Selektionsoperator ersetzen

Hinzufügen Zitate

Ich begann mit dieser quick and dirty-Funktion in meinem .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

So, jetzt habe ich visuell auswählen, was ich will (in der Regel über viw - visuell wählen Sie innerhalb Wort ) in Anführungszeichen ein und drücken Q für doppelte Anführungszeichen, oder drücken Sie q für einfache Anführungszeichen.

Entfernen Zitate

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

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

Ich benutze vim-textobj Anführungszeichen so dass vim behandelt Anführungszeichen als Textobjekte . Dieses Mittel kann ich vaq tun (visuell wählen Sie um Anführungszeichen . Diese findet die nächste Zitate und visuell wählt sie. (Dies ist optional, können Sie einfach so etwas wie f"vww tun.) Dann habe ich drücken s zu Streifen die Zitate aus der Auswahl.

Ändern Zitate

KISS. I entfernen Anführungszeichen und in Anführungszeichen . Zum Beispiel einfache Anführungszeichen mit doppelten Anführungszeichen zu ersetzen, würde ich die Schritte durchführt: 1. einfache Anführungszeichen entfernen: vaqs, fügt 2. neue Angebote: vwQ.


Hier sind einige einfache Zuordnungen, die verwendet werden können, zu zitieren und ein Wort unquote:

" '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>

Ich verwende nnoremap in meinem .vimrc

Um Apostroph ein Wort:

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

Um Anführungszeichen (Arbeiten auf doppelte Anführungszeichen als auch) zu entfernen:

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

Regel erinnern:. 'Sq' = Apostroph

VIM für vscode tut es awsomely. Es basiert ein vim-Surround , wenn Sie verwenden vscode nicht.

  

Einige Beispiele:

     

"test" mit Cursor in Anführungszeichen eingeben cs "‘, um am Ende mit 'Test'

     

"test" mit Cursor in Anführungszeichen Typ ds“mit Test am Ende

     

„test“ mit Cursor in Anführungszeichen eingeben cs "t und geben Sie 123> am Ende   mit <123> test

     

Test mit Cursor auf Wort Testart ysaw), um am Ende mit (Test)

Wie wäre das?

 :%s/\'/"/g

schrieb ich ein Skript, das tut dies:

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>

zu bedienen, einfach Highlight etwas, Hit Kontrolle l, und geben Sie ein Zeichen. Wenn es eines des Zeichens ist die Funktion kennt, wird es die richtigen Abschlusszeichen zur Verfügung stellen. Wenn es nicht ist, wird es das gleiche Zeichen verwenden, um auf beiden Seiten einzufügen.

Surround.vim kann mehr als nur dies, aber das war ausreichend für meine Bedürfnisse.

Visuelles Modus Karte Beispiel einfache Anführungszeichen um einen ausgewählten Textblock hinzufügen

:vnoremap qq <Esc>`>a'<Esc>`<i'<Esc>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top