Dlaczego wstawka shift działa w pełni tylko w trybie wstawiania?

13

Próbowałem po prostu wkleić część zawartości (w Git Bash na serwerze CentOS) do pliku za pomocą vima.
Właśnie otworzyłem plik i spróbowałem użyć shift+ inserti zauważyłem, że pierwsza połowa (z grubsza) zostaje odcięta, ale jeśli ustawię vim na tryb wstawiania i naciśnij shift+ insertwszystko zostanie idealnie wklejone.
Zastanawiałem się, dlaczego tak jest?

Dzięki

treyBake
źródło
Hej, też mam dwa kciuki !!! : D
RonJohn,

Odpowiedzi:

24

Zarówno Shift+, jak Inserti „ wklejanie ” do terminala zachowują się w podobny sposób - emulują naciśnięcia klawiszy.

Jest to ważne rozróżnienie, które często jest niemożliwe do wykonania dla terminali - piszesz czy wklejasz? Uwaga : niektóre terminale obsługują tryby „ wklejania w nawiasy ”, po komentarzu @ Josha natknąłem się nawet na wklej w nawiasach kwadratowych wtyczki vim w Xterm, który może Cię zainteresować.

Wklejone dane zostaną utracone do pierwszego znaku, który wejdzie w tryb wstawiania. Może się również zdarzyć, że kursor się poruszył i że inne części pliku uległy zmianie (np. Zmieniła wielkość liter / została usunięta / itp.) ...

Podsumowując, jeśli wklejasz tekst, który chcesz wstawić do pliku, najpierw przejdź do trybu wstawiania.


Spróbuj skopiować następujący tekst i wklej go do terminala z uruchomionym Vimem (nie w trybie wstawiania):

hello how are you

Rezultat jest taki sam, jak wpisanie tych samych liter na klawiaturze:

wynik wklejenia do Vima

W takim przypadku pozostawia Cię w trybie wstawiania ...

Teraz spróbuj wyjść z trybu wstawiania - Esc- i wkleić następujące

/are
n

Spowoduje to wyszukiwanie „are”:

wynik wklejenia do Vima

Teraz wklej to:

:0
dG

O nie ... wszystko zniknęło!

wszystko na nic


Przekonasz się również, że jeśli masz włączone wcięcie, wklejenie bloku kodu do vima (w trybie wstawiania) spowoduje zbyt duże wcięcie - spowoduje automatyczne wcięcie, a następnie twój wklejony kod będzie zawierał wcięcie.

def my_print(message):
    print(message)
    print('done...')

wklejanie kodu

Aby to naprawić, użyj poleceń :set pastei:set nopaste

wklejanie kodu (tryb wklejania)

Attie
źródło
4
„To ważne rozróżnienie, którego terminale nie mogą zrobić - piszesz czy wklejasz?” - nie jest to do końca prawdą, niektóre terminale i aplikacje obsługują „wklejanie nawiasów”, gdzie specjalna sekwencja jest wysyłana przed i po wklejonym tekście.
Ash
@Josh: ciekawe, dzięki ... Twój komentarz doprowadził mnie nawet do wtyczki vima
Attie
Czy tylko mnie to niepokoi set nopaste? Spodziewam unset paste.
Eric Duminil,
@ThisGuyHasTwoThumbs jako alternatywa, przynajmniej podczas korzystania z Vima, możesz użyć "+rejestru do interakcji ze schowkiem systemowym, ponieważ będzie on zachowywał się bardziej rozsądnie. Minusem jest to, że niektóre systemy lub kompilacje Vima mogą używać "*zamiast tego lub po prostu nie mają obsługi schowka systemowego, ale z mojego doświadczenia "+jest całkiem niezawodny.
8bittree