Skopiowałem część kodu HTML ze strony internetowej i chciałem zapisać go w pliku. W tym celu rozpocząłem nową vim
sesję w oknie terminala, z (nową) nazwą pliku podaną w wierszu poleceń, naciśnij, iaby przejść do trybu wstawiania, a następnie CtrlShift+ Vi czekałem, aż [-- INSERT --]
pokaże się na dole i czekałem ...
Ponieważ vim
po kilku sekundach nie reagowałem, otworzyłem „Edytor tekstu” z menu Aplikacje → Akcesoria, wkleiłem tekst (który pojawił się w ułamku sekundy, zapisałem go pod nową nazwą, zamknąłem i zabiłem sesję Vima, która nadal nie zostało zrobione, 1,5 minuty później. Ilość tekstu wynosiła 186 000 w 3200 liniach, nie powiedziałbym, że nadmiernie, ani zbyt długich linii.
Czy istnieje sposób na przyspieszenie tego rodzaju wstawiania vim
i / lub czy istnieje wyjaśnienie, dlaczego jest to tak wolne w porównaniu do korzystania z edytora tekstu, który jest okropny i zorientowany myszką?
(% Procesora według top
nie przekracza 5%, chociaż mam kilka procesorów wolnych w systemie, więc może to być jakiś problem związany z We / Wy, który nie występuje podczas odczytywania tego samego tekstu z pliku)
Informacje o wersji:
Ubuntu 12.04
Vim: 7.3, z łatkami dostarczonymi przez Ubuntu 12.04
bash: 4.2.25
terminal gnome: 3.4.1.1
vim
, wkleić, a następnie włącz go ponownie. Spróbuj także użyć tej:set paste
funkcji, aby sprawdzić, czy to poprawi. Zobacz:help paste
, jak opisuje, w jaki sposóbvim
nie rozróżnia typowania i wklejania.vi
się też parsowania pliku podczas wczytywania (po zapisaniu sposobu @ l0b0). Ale to działa szybko.:set paste
nie wydaje się naprawdę coś zmienić (nie używam stopera, tylko ściana zegara).Odpowiedzi:
Aby szybko zapisać dużo tekstu ze schowka do pliku, możesz uruchomić
cat > file.txt
, wkleić zawartość, a następnie nacisnąć Ctrl- d.Jeśli Xsel zainstalowany, można zrobić
:r !xsel
, aby wstawić „primary” (aka „myszy”.) Wybór w vim, lub:r !xsel -b
wstawić „schowka” ( Ctrl- c) bufor. Możesz także zapisać wybór bezpośrednio do pliku za pomocąxsel >file.txt
lubxsel -b >file.txt
. Eliminuje to potrzebę oddzielnego wklejania + akcji EOF i pozwala uniknąć drukowania całego bufora kopiowania w terminalu.Jeśli nie masz Xsela oprócz xclip, odpowiednie polecenia dotyczą
xclip -out
wyboru podstawowego lubxclip -out -selection clipboard
bufora schowka.źródło
Jest to problem z opróżnianiem bufora na dysk. Vim stara się zapewnić bezpieczeństwo pracy i nie zakłada, że możesz wpisać kilka tysięcy znaków na sekundę. Przeczytaj
:help swap-file
kilka szczegółów na temat buforowania. Rozwiązaniem Twojego problemu jest:Wyłącz plik wymiany vima za pomocą:
lub z poziomu vima przed wklejeniem:
Zobacz
:help swapfile
po więcej szczegółów.Inną opcją jest po prostu wyłączenie synchronizacji z dyskiem pliku wymiany,
:set swapsync=
ale ta opcja wymaga więcej naciśnięć klawiszy do cofnięcia i jestem leniwy. :)Wyłączenie zamiany nie jest bezpieczne dla normalnych operacji! Natychmiast po wklejeniu użyj
:set swapfile
albo,:set swapsync=fsync
aby przywrócić normalne zachowanie (choć technicznie rzecz biorąc, normalne zachowanie mogło być zsynchronizowane, a nie fsync , sprawdź:set swapsync?
wcześniej, czy chcesz wybrać tę trasę).źródło
Jeśli masz
xterm_clipboard
funkcję, możesz użyć rejestrów*
i+
. Rejestry te łączą się z głównym buforem wyboru X11 i schowkiem (odpowiednio).Dlatego jeśli skopiowałeś coś przez CTRL+ c, możesz wkleić go w vimie "+p.
Jeśli po prostu zaznaczyłeś go bez kopiowania, możesz go wkleić "*p.
Możesz również ustawić
*
bufor jako domyślny:set clipboard=unnamed
. Następnie dowolne yank ( y), paste ( p) itp., Które nie określają rejestru, użyją*
rejestru. Dodano także Vima 7.3.74clipboard=unnamedplus
, który+
domyślnie będzie korzystał z rejestru.Można również kopiować rzeczy do pierwotnych selekcji i schowka buforów przez szarpanie, na przykład: "+yy.
Pamiętaj, że jak wspomniano, wszystkie te funkcje wymagają tej
xterm_clipboard
funkcji. Możesz sprawdzić, czy masz tę funkcję, robiąc:version
wewnątrz vima lubvim --version
z powłoki i poszukaj+xterm_clipboard
. Jeśli to mówi-xterm_clipboard
, nie masz go i musiałbyś ponownie skompilować vima.źródło
xterm_clipboard
jest tylko w przypadku uruchamiania vima z terminala.xterm
.xterm_clipboard
dotyczy dowolnego emulatora terminala, nie tylko xterm. Sam używam urxvt.