Przestań wklejać zaznaczenia jako tekst!


10

Używam VI i VIM od lat (30 lub więcej) (w xterms, nie w swoim własnym oknie, gvim) i mam ogromną bibliotekę poleceń vim , które daję vim używając środkowego przycisku myszy jako wyboru.

Na przykład często robiłem takie rzeczy jak ...

 vi {many_hundreds_of_files}
   paste vim commands using mouse - one paste per file.

Wybór obejmowałby wiele poleceń VIM do wykonywania takich czynności, jak zamiana testu, formatowania, przesuwania linii itp. Itd., I zwykle kończy się na: w i: następne polecenia VIM na końcu wyboru, więc vim jest gotowy, aby wkleić go ponownie do następnego pliku. To pozwala mi aktualizować ogromną liczbę plików na BARDZO skomplikowane sposoby, bez potrzeby specjalnych skryptów (takich jak edycja lokalna Perla), aby to zrobić.

Niektóre z tych past poleceń vim mają ponad 200 linii (przechowywane w plikach tekstowych, które wyskakują na ekranie i „kopiuj wszystko”! Wprowadzają one wiele zmian w zestawie tysięcy plików, które ponownie formatuję. Ale tylko dla określonego zestawu plików, nie dla mojej codziennej pracy z vimem: EG: Ponowne formatowanie plików tekstowych / danych.

Problem...

Podczas mojej ostatniej poprawki systemowej (Fedora 25) vim wkleja teraz zaznaczenie myszy JAKO TEKST, a nie jako polecenia vim, i nie mogę tego powstrzymać!

Nadal działa dobrze na innym systemie (Fedora 24).

Jeśli chcę wkleić tekst, wklejam go przed wklejeniem! Nie chcę, aby VIM automatycznie wklejał zaznaczenia jako tekst, gdy nie jest w trybie wstawiania. Rozumiem, że miało to na celu zabezpieczenie, ale dla mnie jest to GŁÓWNY problem z użytecznością.

Próbowałem z powrotem randki wpisów terminfo (xterm-256color) z maszyny, która tego nie robi (szczególnie wpis „terminous” kmous). Spojrzałem również na ustawienie vim ": set mouse =" (które jest zerowe!). Nie wiem, czy jest to xterm (wątpliwy), czy coś, co zmieniło się w VIM (prawdopodobnie), a dzienniki zmian i Google były nieprzydatne.

Nic jednak nie wydaje mi się tak stare.


Znaleziono innego użytkownika z tym samym problemem, mniej szczegółów, bez rozwiązania unix.stackexchange.com/questions/346293/...
Anthony

1
Wątpię, że to bardziej prawdopodobne vimzmiana: Jak można vimwewnątrz xtermcoś wiedzieć wprowadzone poprzez klawiaturę lub wklejone przez klawiszem myszy? Nie znam takiego mechanizmu. Z drugiej strony xtermwie, że się wykonuje, vimwięc może zdecydować, aby otoczyć wklejanie ii <esc>. Spróbuj (a) z innym rodzajem okna terminala i (b) kopię vimz inną nazwą. To powinno pomóc w zawężeniu przyczyny problemu.
Philippos

Zgadzam się z @philippos. Może czymś innym niż vimprzejęcie metody wklejania. Może spróbuj ssh'ing lub telnetować na maszynie i wkleić w ten sposób. Jeśli masz okno Windows, użyj putta, aby ssh na maszynie Fedora25 i wkleić w ten sposób.
Jim U

Nie ma to bezpośredniego związku, ale gvim w systemie Windows zachowywał się w ten sposób od lat. Kiedy instalujesz gvim, otrzymujesz dwa pliki wykonywalne gvim.exe(graphic-vim) i wiersz poleceń vim.exe. Wklej „itext” w gvim.exe i otrzymasz itext. Wklej go w vim.exe, a otrzymasztext
Jim U

1
@Philippos Ten mechanizm może być wklejany w nawiasach . Nie wiem, w jaki sposób Vim mógłby to obsługiwać, być może pastetoggleopcja?
Gilles „SO- przestań być zły”

Odpowiedzi:


12

Cóż, po przejrzeniu wielu stron internetowych, z których wiele zawierało wskazówki, które nie działały, znalazłem podpowiedź (dodatkowy tekst wokół pasty), która doprowadziła mnie do przyczyny i rozwiązania problemu.

Wygląda na to, że vim wbudował w to wiele „fałszywych” wpisów termcap, których używa, gdy rozpoznaje określone terminale (i czasem się myli, choć w tym przypadku nie było źle).

Ustawienia termcap w vimie są bardzo liczne, ponieważ NIE pojawiają się na normalnej liście ustawień „: set all”. Aby je zobaczyć, musisz użyć „: set termcap”. Określone „niestandardowe” ustawienie termcap to „t_BE” (patrz vim „: help t_BE”). Wbudowana pomoc „xterm-bracketed-paste” wyjaśnia to ustawienie termcap wewnętrznych do vim.

Zasadniczo, jeśli to ustawienie jest zdefiniowane (w tym przypadku przez Vima, a nie termcap / terminfo), wtedy vim wyśle ​​je do xterm podczas uruchamiania, co mówi xterm, aby dodał specjalne kody wokół dowolnego tekstu wklejanego przez użytkownika z zewnętrznego źródła. Kiedy vim je zobaczy, automatycznie przechodzi nie tylko w tryb wstawiania, ale także ustawia tryb wklejania, aby nie formatować tekstu.

Później (tryb wklejania) wydaje mi się BARDZO przydatny! To pierwsze przysparza mi kłopotów.

Rozwiązanie brute force wyłącza się wklejanie nawiasów, dodając to do „.vimrc”

:set t_BE=

Alternatywne rozwiązanie ....

Zamiast całkowicie wyłączać wklejanie nawiasów, przestań podejmować działania vima, gdy zobaczy początkową sekwencję wklejania terminali (z myszy), w trybie poleceń lub w trybie normalnym.

:nmap <PasteStart>  <NOP>
:nmap <PasteEnd>    <NOP>
:cmap <PasteStart>  <NOP>
:cmap <PasteEnd>    <NOP>

Użycie tego oznacza, że ​​jeśli wkleisz tekst w trybie wstawiania, vim nie będzie próbował sformatować (wcięcia) tekstu, który jest więcej niż prawdopodobnie już wcięty.

Nie oznacza to, że nie muszę już przełączać trybu wklejania, ponieważ używam również przełączania trybu wklejania (mapowanego na F2), aby wyłączyć „showbreak” i „listchars” (wyświetlanie zawijanych linii, tabulatorów, spacji bez przerw i dodatkowe spacje na końcu linii). Nadal będę musiał ustawić vima w tym trybie, gdy chcę dokonać wyboru myszy, aby wkleić go w innym miejscu.

Komentarze i sugestie dotyczące rozwiązań są mile widziane.


Wydaje się, że działa to również w Cygwin Vm, ale niestety nie rozwiązuje problemu w VS Vim
James Robinson

@JamesRobinson Bardziej niż prawdopodobne jest to inny wbudowany terminal VS
Anthony
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.