"{register}p
wird nicht funktionieren, wie Sie beschreiben. Die Auswahl wird durch den Inhalt des Registers ersetzt. Sie müssen stattdessen Folgendes tun:
" I haven't found how to hide this function (yet)
function! RestoreRegister()
let @" = s:restore_reg
return ''
endfunction
function! s:Repl()
let s:restore_reg = @"
return "p@=RestoreRegister()\<cr>"
endfunction
" NB: this supports "rp that replaces the selection by the contents of @r
vnoremap <silent> <expr> p <sid>Repl()
Dies sollte in Ordnung sein, solange Sie kein Plugin verwenden, dessen vmap nicht zu p gehört und das erwartet, dass ein Register überschrieben wird.
Dieser Code ist als ein Skript zur Verfügung gibt . Ingo Karkat hat auch ein Plugin definiert , das das gleiche Problem löst.
regtype
(zeilenweise?) Und dass eine Neuzuordnung von p zupgvy
ausreichend ist."xp
überschreibt dies nicht den@"
Inhalt mit@x
anders alspgvy
:xnoremap p pgv@=v:register.'y'<cr>
?Ich weiß nicht , wie das Standard - vim Verhalten des Kopierens der gesamten Textes gelöscht mit
d
,D
,c
, oderC
in das Standardregister.Ich habe es umgangen, indem ich
d
auf"_d
,c
zu"_c
und so weiter abgebildet habe .Aus meiner .vimrc:
quelle
Verwenden Sie Folgendes:
Dadurch wird der im visuellen Modus eingefügte Text erneut ausgewählt und erneut gezogen.
Bearbeiten: Damit dies funktioniert
"xp
, können Sie Folgendes tun:v:register
wird auf den letzten Registernamen erweitert, der in einem normalen Modusbefehl verwendet wird.quelle
"xp
überschreibt dieser Ansatz@"
mit@x
.xnoremap p pgv"@=v:register.'y'<cr>
hat bei mir nicht funktioniert. Dies tut jedoch:xnoremap <expr> p 'pgv"'.v:register.'y'
g
funktioniert? Ich habe es noch nie gesehen.g
allein macht nichts. Es bietet erweiterte Befehle mit mehreren Tasten, wie zz
. Geht beispielsweisego
zum n-ten Byte im Puffergj
undgk
zur nächsten und vorherigen angezeigten Zeile (unterscheidet sich vom Zeilenumbruchjk
),ga
zeigt Informationen zum Zeichen unter dem Cursor an,gJ
verbindet Zeilen ohne Leerzeichen undgv
stellt hier die letzte visuelle Auswahl wieder her. Sie können verwenden:help gv
.:xnoremap <expr> p 'pgv"'.v:register.'y`>'
, ich habe `` `>` `hinzugefügt, um die Cursorposition wiederherzustellenIn deinem
.vimrc
Ich fand dies aus einer Antwort in einem ähnlichen Thread, aber die ursprüngliche Quelle war http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text . Es werden einige Nachteile erwähnt, aber es funktioniert gut für mich.
quelle
.vimrc.local
ist auch in Ordnung.Die Lösung von Luc Hermitte wirkt wie ein Zauber. Ich habe es ungefähr eine Woche lang benutzt. Dann habe ich eine Lösung aus Steve Loshs .vimrc entdeckt , die gut funktioniert, wenn YankRing Teil Ihrer Plugin / Bundle-Reihe ist:
quelle
Versuchen Sie dies in Ihrem
~/.vimrc
:xnoremap
bedeutet, dass dies nur für denVisual
Modus gilt, nicht für den ModusVisual + Select
.<expr>
bedeutet, dass{rhs}
diexnoremap {lhs} {rhs}
Einstellung als Ausdruck ausgewertet wird.In diesem Fall unser Ausdruck
'pgv"'.v:register.'y'
verwendet.
für Verkettung.v:register
wird anhand des Registers ausgewertet, das während der Erfüllung des Mappings verwendet wird.Das Ergebnis von
"xp
würde auswertenpgv"xy
, wox
sich das Register befindet.Eine Antwort auf diese Frage zum Stapelüberlauf hat mir geholfen: Vim - Mapping mit einem optionalen Registerpräfix in Verbindung mit Benoits Antwort auf dieser Seite
quelle
Lucs Funktion funktionierte gut für mich, nachdem ich eine Änderung vorgenommen hatte, um die Tatsache zu unterstützen, dass ich Zwischenablage = unbenanntes Set habe:
quelle
clipboard=unnamedplus
dies@+
anstelle von@*
.Luc Hermitte hat es geschafft! Wirklich gut. Hier ist seine Lösung in einer Umschaltfunktion, so dass Sie zwischen normalem Verhalten und Put ohne Register wechseln können.
Mit dem Befehl schaltet u das Verhalten um
quelle
silent! vunmap
alsvnoremap <silent> <expr> p p
Klebebandprogrammierung, funktioniert aber bei mir:
quelle
Versuchen -
quelle