Jak sprawić, by wycinanie / kopiowanie / wklejanie w GVim na Ubuntu działało z Ctrl + X, Ctrl + C, Ctrl + V?

54

Domyślnie skróty do wycinania / kopiowania / wklejania w GVim na Ubuntu to:

 Wytnij „+ x
 Skopiuj „+ y
 Wklej ”+ gstr

Chciałbym używać kombinacji klawiszy sterujących w GVim, tak jak w Firefoksie i innych aplikacjach GNOME. Jak skonfigurować GVim, aby działał jak inne aplikacje Gnome?

pcapademic
źródło
Aby uniknąć konfliktów z domyślnymi klawiszami vim, wybierz Ctrl + Shift + klawisz zamiast Ctrl + klawisz
Sheharyar

Odpowiedzi:

50

Dodaj następujące wiersze do swojego _vimrclub.vimrc

source $VIMRUNTIME/mswin.vim
behave mswin

Ale uwaga, trybem wizualnym jest CTRL-Q zamiast CTRL-V.

Dla przeglądu tego, co robi mswin.vim, widzisz kod źródłowy mswin.vim . Jest bardzo dobrze skomentowany i jeśli jakieś polecenie jest niejasne, możesz łatwo to sprawdzić w pomocy vima.

Oto krótki przegląd skompilowany ze źródła:

  • Klawisz Backspace i kursor zawijają się do poprzedniego / następnego wiersza
  • CTRL-X i SHIFT-Del są cięte
  • CTRL-C i CTRL-Insert są kopiowane
  • CTRL-V i SHIFT-Insert są wklejane
  • Użyj CTRL-Q, aby zrobić to, co kiedyś CTRL-V
  • Użyj CTRL-S do zapisywania, także w trybie wstawiania
  • CTRL-Z to Cofnij; jednak nie w cmdline
  • CTRL-Y to Ponów (choć nie powtarzaj); jednak nie w cmdline
  • Alt-Space to menu System
  • CTRL-A to Wybierz wszystko
  • CTRL-Tab to następne okno
  • CTRL-F4 to Zamknij okno

Na prośbę Nippysaurusa: w moim .gvimrc wstawiłem następujące polecenie, aby wyświetlić Ctrl-V oprócz Wklej w menu:

unmenu! Edit.Paste
aunmenu Edit.Paste
nnoremenu 20.360 &Edit.&Paste<Tab>Ctrl-V        "+gP
cnoremenu    &Edit.&Paste<Tab>Ctrl-V        <C-R>+

Nie przetestowałem go dokładnie, tylko szybkie sprawdzenie, czy zrobiło to, czego się spodziewałem. Działa dla mnie, mam nadzieję, że ci się uda ;-)

Ludwig Weinzierl
źródło
1
Rozumiem i doceniam uwagi, które Manni i Peter Thorin przedstawili w komentarzach do odpowiedzi Petera Thorina. Uważam, że nauczyłem się GVima na Windowsie jako zamiennik notatnika i chcę mniej tarcia. Dzięki Ludwig
pcapademic
2
Czy istnieje sposób zmiany tekstu skrótu menu, aby pasował do nowych klawiszy skrótu?
Nippysaurus
@Nippysaurus: Próbowałem z menutrans w .gvimrc. Nie udało mi się, zadziała wieczorem.
Ludwig Weinzierl
2
Wygląda na to, że mswin.vimma już behave mswinpołączenie. Czy konieczne jest ponowne wywołanie tego we własnym zakresie _vimrc?
Nathan Friend,
1
@NathanFriend Ditto. Działa nawet bez behave mswin, przynajmniej w moim systemie z Vimem 8.0.
Mikel
46

Jeśli chcesz, aby Wytnij / Kopiuj / Wklej działał przy użyciu „standardowych” skrótów klawiszowych, ale nie chcesz zmieniać żadnych innych opcji konfiguracji w gvim, spróbuj dodać następujące ~/.vimrc.

vmap <C-c> "+yi
vmap <C-x> "+c
vmap <C-v> c<ESC>"+p
imap <C-v> <C-r><C-o>+

Wklej działa tylko w trybie wizualnym i wstawiania, więc nie musisz się martwić konfliktem z Ctrl-V i blokowym trybem wizualnym. Nie stanowi to problemu, ponieważ funkcja Kopiuj i Wytnij powoduje przejście do trybu wstawiania, dzięki czemu można natychmiast wkleić. Jeśli spróbujesz, przekonasz się, że jest to całkowicie naturalne.

Wymyśliłem tę konfigurację po kilku iteracjach poprawiania i myślę, że teraz jest „idealna”. Jeśli jesteś nawet trochę niezadowolony z obecnej konfiguracji kopiuj / wklej, wypróbuj to i założę się, że ci się spodoba.

Cogan
źródło
Właśnie tego szukałem. Dzięki.
Sean McCleary
2
Po kilku eksperymentach i konsultacjach :help i_ctrl-r_ctrl-opostanowiłem zmienić imap <C-v> <ESC>"+pana imap <C-v> <C-r><C-o>+; działa to zgodnie z oczekiwaniami, gdy kursor znajduje się po lewej stronie pierwszego znaku linii, i najbardziej naśladuje zachowanie „standardowe”.
Holger,
Zastanawiam się nad zmianą <C-v>na shift + insert, która wydaje się dużo szybsza na moim komputerze. Ale w trakcie projektu i nie mam ochoty teraz ponownie uruchamiać vima. Po prostu dzielę się
Will
Jesteś niesamowity =)
Yugal Jindle
9

Jeśli chcesz zachować normalne zachowanie vima, ale także umożliwić mniej kłopotliwe korzystanie ze schowka systemowego, zobacz Uzyskiwanie dostępu do schowka systemowego . Jeśli chciałbyś gvima używać schowka systemowego jako bufor domyślny (więc każdy x, y, p, polecenia itd używa schowka), a następnie dodaj następującą linię do vimrc:

set clipboard=unnamed

Osobiście korzystam z buforów znacznie bardziej w vimie niż między vimem a systemem; więc wolę mieć nieco bardziej kłopotliwy skrót niż ciągłe zamykanie schowka w systemie. Ale fajnie, że jest opcja dla tych, którzy wolą.

jtb
źródło
2

Myślę, że możesz to dodać za pomocą polecenia: imap (wypróbowałem to tylko z Ctrl + X w systemie Windows, który działał, naciśnięcie ctrl + c wydaje się anulować polecenie, więc być może będziesz musiał to zrobić w vimrc).

:imap <C-X> "+x
:imap <C-C> "+y 
:imap <C-V> "+gP

Jeśli dodasz go do ~ / .vimrc, wystarczy usunąć: przed imap.

imap dodaje tylko wiązania w trybie wstawiania, więc możesz chcieć zmienić je na mapę lub coś innego. Zajrzyj do, :help mapmodeaby dowiedzieć się więcej o mapowaniu i cofaniu mapowania.

Powodzenia!

Peter Thorin
źródło
1
To powinno załatwić sprawę. Ale to zły pomysł. Ctrl-V powinien przejść do trybu wizualnego, Ctrl-C anuluje wszelkie polecenia. A sztuczka zadziała tylko w twoim systemie; na innej maszynie zgubisz się.
innaM
1
Zgadzam się częściowo z tym, że to zły pomysł, nie chciałbym go używać sam, ale jeśli jesteś zwykłym użytkownikiem gvim, prawdopodobnie nie przegapisz powiązań, które usuwasz.
Peter Thorin
1
Dlaczego przede wszystkim używać gvim? Jak długo pozostaniesz zwykłym użytkownikiem?
innaM
2
Nie sądzę, że to taki zły pomysł. Ludzie są przyzwyczajeni do Ctrl + X itp. I istnieją miliardy innych powodów, aby używać vima.
Ludwig Weinzierl