Chcę mieć szybki sposób na ustawienie 'paste'
opcji Vima , wstawienie tekstu i powrót do poprzedniej wartości 'paste'
.
Typowy przypadek użycia wstawia zawartość schowka OS dosłownie, niezależnie od tego, który tryb przepisywania w trybie wstawiania może być aktywny, taki jak automatyczne wcięcie i bez zmiany stanu Vima. Innym przykładem użycia byłoby umożliwienie funkcji makra systemu operacyjnego wstrzykiwania naciśnięć klawiszy do Vima i interpretowania ich jako dosłowny tekst.
To oczywiście uogólnia na inne opcje - ogólną ideą jest ustawienie niektórych opcji, ale tylko na czas jednej podróży przez tryb wstawiania.
Zasadniczo chcę powiązać sekwencję klawiszy (powiedzmy _i
) z makrem, które to robi
:set paste
i…<Esc>
:set nopaste
gdzie i…<Esc>
mam na myśli przejście do trybu wstawiania (jak w przypadku i
polecenia) i wznowienie makra po powrocie do trybu polecenia, z tym wyjątkiem, że chcę skończyć z 'paste'
nadal aktywnym, jeśli był wcześniej aktywny. W jaki sposób mogę to zrobić?
Uwaga: zawartość schowka OS jest mapowana do "*
rejestru . Kiedy to działa, 'paste'
opcja nie jest bardzo przydatna. Scenariusz motywujący dla tego pytania dotyczy czasów, w których warunki obsługi "*
rejestru nie są spełnione - Vim nie jest skompilowany z tą +xterm_clipboard
funkcją lub działa w terminalu, takim jak Screen lub przez SSH, który izoluje go od serwera X otoczenia.
źródło
+
lub*
zarejestrować?Odpowiedzi:
Wypróbuj to:
Przechowuje bieżący stan wklejania w zmiennej inPaste i ustawia wklej, jeśli nie jest jeszcze ustawiony. Następnie ustawia autocmd, kiedy wychodzisz z trybu wstawiania, a następnie wprowadza cię w tryb wstawiania.
Po wyjściu z trybu wstawiania uruchamia on autocmd, który najpierw usuwa autocmd (więc nie uruchamia się, gdy opuścisz tryb wstawiania w inny sposób), a na końcu ustawia nopaste, jeśli pierwotnie nie byłeś w trybie wklejania.
Ponadto, jeśli używasz vima w terminalu, możesz rzucić okiem na vim-bracketing-paste , który używa funkcji trybu wklejania w nawiasach udostępnionej przez kilka emulatorów terminali w celu wykrycia, czy wklejasz i ustawiasz tryb automatycznie.
Edycja: naprawiono skrypt
źródło
_i
,paste
opcja jest wyłączona, nawet jeśli była wcześniej włączona.'paste'
powinien być aktywny tak krótko, jak to możliwe. Wyłącza wiele funkcji (w tym map), ponieważ jego jedynym celem jest uniknięcie błędnej interpretacji wklejanego tekstu. Dlatego uważam, że podany wymóg nie powinien być konieczny.To powiedziawszy, w rzeczywistości jest dość łatwe do wklejenia bez konieczności ustawiania
'paste'
. Jeśli korzystasz z gvim lub masz+xterm_clipboard
vim konsoli, możesz po prostu użyć"+p
do wklejenia ze schowka systemu operacyjnego.Problem automatycznego wcięcia podczas wklejania zdarza się tylko w dwóch scenariuszach. Wstawianie zawartości rejestru w trybie wstawiania (
<C-r>+
) lub wklejanie środkowym przyciskiem myszy.Zamiast wstawiać zawartość rejestru w trybie wstawiania, wklejenie rejestru w trybie normalnym pozwoli uniknąć problemu z formatowaniem.
Jeśli chcesz wkleić kliknięcie środkowym przyciskiem myszy, użyj
'mouse'
opcji, aby Vim zamiast terminala zajął się kliknięciem środkowym. Vim wstawi następnie zawartość dosłownie zamiast interpretować tekst przychodzący jako pisany.źródło
'paste'
rzeczywiście nie jest wcześniej aktywny, ale nie chcę o tym myśleć. Często pracuję w Vimie, który nie ma dostępu do schowka X lub myszy, albo dlatego, że moja kompilacja Vima nie ma tejxterm_clipboard
funkcji, albo dlatego, że pracuję np. W sesji ekranowej, która akurat jest aktualnie dołączona do Terminal Xi
, nie pytam, jak to sparametryzować) i przywrócić wartość opcji po powrocie z trybu wstawiania."*p
lub"+p
wklejać ze schowka, ale nie chcę używać zdolności wklejania systemu”), a wtedy ta odpowiedź jest niepotrzebna. Albo nie, i myślę, że ta odpowiedź ma tutaj swoje miejsce.Osobiście korzystam z yoklawiszy z doskonałej wtyczki Tima Pope'a bez wad . Z jego dokumentacji:
Zainstalowanie wtyczki może być przesadą tylko dla twojego pytania, ale uważam, że zapewnia ona także wiele innych przydatnych skrótów klawiszowych (więcej informacji w pliku README ).
źródło
W Vimie 8+ na Linuksie lub Macu możesz teraz po prostu użyć natywnej pasty terminala (np. Środkowy przycisk myszy,
ctrl+shift+V
w Gnome,cmd+V
na Macu), jeśli terminal obsługuje wklejanie w nawiasach. Nie naciskaj,i
aby włączyć tryb wstawiania.Wklei zawartość schowka systemu operacyjnego, zachowując spacje i tabulatory bez dodawania automatycznego wcięcia. Jest to odpowiednik starego
:set paste
,i
,ctrl+shift+V
,esc
,:set nopaste
metody.Nie potrzebujesz nawet zainstalowanych funkcji
+clipboard
lub+xterm_clipboard
vim. Ta funkcja nosi nazwę „wklejania w nawiasach”. Aby uzyskać więcej informacji, zobacz /programming/2514445/turning-off-auto-indent-when-pasting-text-into-vim/56781763#56781763źródło