Czy ktoś wie, jak wkleić wizualnie wybrany obszar bez umieszczania zaznaczenia w domyślnym rejestrze?
Wiem, że mogę rozwiązać problem, zawsze wklejając z jawnego rejestru. Ale pisanie na maszynie "xpzamiast po prostu bolip
"{register}p
nie będzie działać tak, jak opisujesz. Zastąpi wybór treścią rejestru. Zamiast tego będziesz musiał zrobić coś takiego:
" 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()
Co powinno być w porządku, o ile nie używasz wtyczki, która ma mapę vmap inną niż nore na p i która oczekuje nadpisania rejestru.
Kod ten jest dostępny jako skrypt tam . Ingo Karkat zdefiniował również wtyczkę rozwiązującą ten sam problem.
regtype
(linewise?) I że ponowne odwzorowanie p dopgvy
jest wystarczające."xp
, to nie nadpisuje@"
treści@x
innympgvy
:xnoremap p pgv@=v:register.'y'<cr>
?Nie lubię domyślne zachowanie vim kopiowania cały tekst usunięty z
d
,D
,c
lubC
w domyślnym rejestrze.Poradziłem sobie z tym, mapując
d
do"_d
,c
do"_c
i tak dalej.Z mojego .vimrc:
źródło
Użyj następujących:
spowoduje to ponowne zaznaczenie i ponowne szarpnięcie dowolnego tekstu wklejonego w trybie wizualnym.
Edycja: aby to działało
"xp
, możesz wykonać:v:register
rozwija się do ostatniej nazwy rejestru używanej w poleceniu trybu normalnego.źródło
"xp
tego podejścia nadpisuje@"
się@x
.xnoremap p pgv"@=v:register.'y'<cr>
nie zadziałała dla mnie. To jednak robi:xnoremap <expr> p 'pgv"'.v:register.'y'
g
robi? Nie widziałem tego wcześniej.g
sam nic nie robi. Zapewnia rozszerzone, wieloprzyciskowe polecenia, takie jakz
. Na przykład,go
przechodzi do n-tego bajtu w buforzegj
igk
przechodzi do następnej i poprzedniej wyświetlanej linii (różni się od tego,jk
kiedy linie są zawijane),ga
wyświetla informacje o znaku pod kursorem,gJ
łączy linie bez spacji i tutajgv
przywraca ostatnią wizualną selekcję. Możesz użyć:help gv
.:xnoremap <expr> p 'pgv"'.v:register.'y`>'
, dodałem ``> '' Aby przywrócić pozycję kursoraW Twoim
.vimrc
Znalazłem to z odpowiedzi w podobnym wątku, ale oryginalne źródło to http://vim.wikia.com/wiki/Replace_a_word_with_yanked_text . Wspomina o pewnych wadach, ale dla mnie działa dobrze.
źródło
.vimrc.local
też jest OK.Rozwiązanie Luc Hermitte działa jak urok. Używałem go około tygodnia. Potem odkryłem rozwiązanie z .vimrc Steve'a Losha, które działa dobrze, jeśli YankRing jest częścią twojego zestawu wtyczek / pakietów:
źródło
Spróbuj tego w swoim
~/.vimrc
:xnoremap
oznacza, że dotyczy to tylkoVisual
trybu, a nieVisual + Select
trybów.<expr>
oznacza, że{rhs}
zxnoremap {lhs} {rhs}
ustawieniem jest oceniany jako wyrażenia.W tym przypadku nasze wyrażenie
'pgv"'.v:register.'y'
jest using.
do konkatenacji.v:register
jest oceniana do rejestru używanego podczas wykonywania mapowania.Wynik
"xp
byłby oceniany dopgv"xy
, gdziex
jest rejestr.Pomogła mi o odpowiedź na to pytanie stackoverflow: Vim - odwzorowanie z opcjonalnym przedrostkiem rejestru w związku z Benoit odpowiedź „s na tej stronie
źródło
Funkcja Luca działała dobrze dla mnie po wprowadzeniu zmiany, aby wspierać fakt, że mam zestaw clipboard = unnamed:
źródło
clipboard=unnamedplus
tego musi być@+
zamiast@*
.Luc Hermitte załatwił sprawę! Naprawdę dobry. Oto jego rozwiązanie, w którym zastosowano funkcję przełączania, dzięki czemu można przełączać się między normalnym zachowaniem a umieszczaniem rejestru bez zastępowania.
polecenie, u włącza zachowanie
źródło
silent! vunmap
zamiastvnoremap <silent> <expr> p p
programowanie taśmą klejącą, ale działa dla mnie:
źródło
próbować -
źródło