Antworten:
Verwenden Sie beim Ziehen (Kopieren) ein Großbuchstabenregister:
"Ay
"A
sagt, an das Register anzuhängena
, im Gegensatz dazu "a
würde der Inhalt des Registers ersetzena
.
Sobald Sie alles in das Register kopiert haben, können Sie alles auf einmal einfügen mit:
"ap
qaq
. Alternativ können Sie Ihr erstes Wort mit dem Kleinbuchstabenregister kopieren, wenn Sie nur vermeiden möchten, dass vorheriger Müll darin enthalten ist : "ay
. Denken Sie daran a
und A
beziehen Sie sich auf dasselbe Register. Sie wirken sich nur darauf aus, wie Dinge hinzugefügt werden.
Sie können auch Ihren eigenen benutzerdefinierten Operator definieren, der jedes Textobjekt oder jeden Text, der von einer Bewegung abgedeckt wird, schrittweise zieht:
fu! Incremental_yank(type, ...) abort
if a:type ==# 'char'
norm! `[v`]y
elseif a:type ==# 'line'
norm! '[V']y
elseif a:0
norm! gvy
endif
call setreg('z', @".(a:type ==# 'char' ? ' ' : ''), 'a' . getregtype('"'))
call setreg('"', @z, getregtype('z'))
endfu
nno <silent> zy :<C-U>set opfunc=Incremental_yank<CR>g@
xno <silent> zy :<C-U>call Incremental_yank(visualmode(), 1)<CR>
nno <silent> zyy :<C-U>set opfunc=Incremental_yank<Bar>exe 'norm! '.v:count1.'g@_'<CR>
nno <silent> zyc :<C-U>let [@", @z] = ['', '']<CR>p
In diesem Beispiel sind 4 Tastenkombinationen installiert:
zy
normaler Bediener, um ein Textobjekt oder eine Bewegung schrittweise zu ziehenzyy
ähnlicher Operator, der auf Linien arbeitetzy
ähnlicher Operator, der an der visuellen Auswahl arbeitetzyc
normaler Befehl zum Leeren der Register "
und z
; nützlich, bevor Sie anfangen, eine Folge von Texten zu ziehenDamit könnten Sie:
zyiw
auf das erste Wort treffen , und wiederholen Sie den Vorgang mit dem Befehl dot auf den nächstenzyy
auf die erste treffen , und wiederholen Sie den Vorgang mit dem Befehl dot auf der nächstenzy
sieDer aktuelle Code überfüllt das z
Register. Wenn Sie x
beispielsweise ein anderes Register verwenden möchten , können Sie die folgenden Zeilen ändern:
call setreg('z', @", 'a' . getregtype('"')) call setreg('x', @", 'a' . getregtype('"'))
^ ^
call setreg('"', @z, getregtype('z')) → call setreg('"', @x, getregtype('x'))
^ ^ ^ ^
nno <silent> zyc :<C-U>let [@", @z] = ['', '']<CR>p nno <silent> zyc :<C-U>let [@", @x] = ['', '']<CR>p
^ ^
Weitere Informationen finden Sie unter:
:h g@
:h getregtype()
:h setreg()
/^#\s.\+
und dann zyv
zum Beispiel!