Automatycznie przełącz na tryb wklejania podczas wklejania ze schowka

1

O ile mi wiadomo, nie ma zdarzenia autocmd do kopiowania i wklejania. Byłem więc ciekawy, czy można napisać skrypt, który przełącza tryb wklejania, gdy schowek jest używany do wklejania. Jeśli może obsłużyć Shift+Insert, Ctrl+Shift+va przycisk myszy w średnim lub nawet skrypt wewnętrzny, to byłoby niesamowite, ale jestem przede wszystkim stara się rozwiązać sprawę ze skrótów klawiaturowych. Mój vim ma -clipboardatrybut.

Myśliciel
źródło
Czy istnieje ważny powód, dla którego nie używasz "+y?
romainl,
Połączyłem schowek „podstawowy” X11 i schowek „schowek” w moim systemie operacyjnym, a także mój vim jest skonfigurowany do automatycznego kopiowania wszystkiego do specjalnych rejestrów. W ten sposób jest to bardzo wygodne. Jest pewien błąd , który należy obejść, ale zalecam wypróbowanie clipIt (i fakeclip, jeśli brakuje + atrybutu schowka w vimie)!
Myśliciel
(hmm, dlaczego powiedziałem yzamiast p?) Nieważne, chodzi mi o to, że jeśli używasz p(z "+/ "*lub bez rejestru, jeśli masz set clipboard^=unnamedplus), wklejony tekst jest zawsze taki, jak się spodziewasz. <kbd> Shift + Insert </kbd>, <kbd> Ctrl + Shift + v </kbd> i środkowy przycisk myszy to niewłaściwy sposób wklejania tekstu w Vimie. pjest właściwą drogą. Chyba że pracujesz zdalnie.
romainl,
Zmienna schowka istnieje tylko dla vima z atrybutem + schowka.
Myśliciel
Zainstalowanie odpowiedniego Vima z obsługą schowka jest zarówno łatwiejsze, jak i szybsze niż manipulowanie narzędziami zewnętrznymi i niestandardowymi mapowaniami. Nic nie przebije p(i P).
romainl

Odpowiedzi:

2

Kiedy używasz GVIM lub wklej za pomocą poleceń p/ i_CTRL-Rrazem z rejestrem "*lub "+Vim rozpoznaje wklej i wszystko powinno działać dobrze. To, o czym mówisz, to prawdopodobnie 'pastetoggle'ustawienie, które służy do przełączania trybu „wklej” podczas wklejania przez terminal (np. Środkowym przyciskiem myszy lub skrótem terminalu). Powodem istnienia mapowania trybu i przełączania jest dokładnie to, że Vim nie jest w stanie wykryć, czy tekst pochodzi od użytkownika, który pisze, czy wkleja.

Możesz w jakiś sposób nauczyć swój terminal, aby wysyłał 'pastetoggle'klucz Vima przed i po wklejeniu (gdy Vim jest obecnie uruchomiony); nie da się tego rozwiązać w samym Vimie.

Ingo Karkat
źródło
Nie mogę zgodzić się ze stwierdzeniem „Vim nie jest w stanie wykryć ...” Kiedy wklejasz tekst, jest on odbierany z szybkością znaków na sekundę znacznie przekraczającą to, co człowiek mógłby kiedykolwiek napisać. Zamiast ustawiać klucz pastetoggle, bardziej użyteczne byłoby ustawienie progu wklejania. Ale ta funkcja nie istnieje.
Bruno Bronosky,
@BrunoBronosky: Nie jestem pewien. W (wolnym) zdalnym terminalu wiele (ludzkich) naciśnięć klawiszy będzie buforowanych, a następnie wysyłanych w jednym pakiecie; Myślę, że informacje o taktowaniu między nimi są następnie tracone (przynajmniej przez telnet ), a Vim nieprawidłowo wykrywa te klucze jako wklejone.
Ingo Karkat,
0

Moje pytanie jest właściwie błędne, ponieważ nie odzwierciedla dokładnie tego, czego chciałem, ale teraz mam to, czego chcę. Przynajmniej w mojej konfiguracji ( set nopaste, set autoindent, copyindent, smarttabsą ustawione), otrzymuję pasty stylu pastę plub Pi nopaste pasty ze stylu Ctrl-Shift-vw trybie wstawiania. Jeśli wkleję Ctrl-Shift-vw trybie normalnym, mam dziwne zachowanie.
Moje ustawienia mogą nie naśladować pastetoggleustawień identycznie i nie odpowiadają na pytanie w tytule, ale rozwiązują problem, który miałem. Testowałem zarówno pod kątem mięty, jak i terminatora.

Myśliciel
źródło
0

Mam poniżej mapustawione w vimie:

set mouse=inv
noremap <MiddleMouse> :set paste<CR>"*p:set nopaste<CR>

Możesz dodać ten wiersz do swojego ~/.vimrclub ~/.exrc.

Myślę, że jest to dość proste i nie wymagałoby wielu wyjaśnień.
(Re) mapuj środkową mysz, aby ustawić tryb wklejania, następnie wklej zawartość *rejestru, a następnie wyłącz tryb wklejania.
Potrzebujesz do tego myszy .

Uwaga: Jak już sugerowano w komentarzach do pytania, nie jest prawidłowym sposobem wklejania tekstu w vimie. Ale teraz mamy zwyczaj wklejania na Linuksie. Przydaje się to mapowanie.

Testowany na vimie 7.4 na gnome-terminalu przez putty + xming.

anishsane
źródło
Zauważ, że działa to tylko jeśli Twój vim został skompilowany z + xterm_clipboard.
Josh