Was Vim-Befehl (e) kann Zitat / unquote Worte verwendet werden?
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.
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
-
drücken Sie q und q für die Aufnahme in die q-Register (wir verwenden "q" als Abkürzung "Anführungszeichen" zu erinnern).
-
Drücken Verschiebung + b Cursor bewegen, um vor dem aktuellen Wort
-
drücken Sie i type ' (ein einzelnes Anführungszeichen)
-
drücken Sie esc dann drücken Sie e , um des Wortes zu beenden
-
drücken Sie a dann drücken Sie ' erneut das Wort mit Anführungszeichen zu umgeben.
-
schließlich drücken Sie q es in
q
Register aufzunehmen.
Wie man es verwendet:
- Bewegen Sie den Cursor auf eine gewünschte Wort.
- Drücken Sie @ q umgibt ein Wort mit Anführungszeichen.
- 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
.
- http://vim.wikia.com/wiki/Wrap_a_visual_selection_in_an_HTML_tag Code von hier wurde geändert und als Teil meiner Antwort verwendet
- https://github.com/beloglazov/vim-textobj-quotes vim -Text-oBJ-Zitate
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>