2009-09-29 10 views
7

Kiedy skopiować dwuwierszowy tekst z (na przykład) PDF otwierane w programie Acrobat Reader w gvim za pomocą CTRL-V, tekst jest wstawiany powyżej linii w gvim, w którym został umieszczony, zamiast w miejscu, gdzie mój kursor to. (scenariusz: chcę skopiować tytuł dokumentu, który jest rozłożony na dwa wiersze i wkleić go między znacznikiem html w gvim).Wklej wielo-liniowy ciąg na gVim w pozycji kursora

Jeśli zrobię to samo z pojedynczym wierszem tekstu, tekst zostanie poprawnie wklejony w miejscu kursora.

Co należy zrobić, aby działało również z dwoma liniami tekstu (np. Coś takiego jak "wklej bez formatowania")?

Ważne: ciąg do wklejenia składa się z dwóch linii oddzielonych znakiem powrotu karetki (lub czegoś podobnego)!

Rozwiązanie

tak naprawdę są dwa ważne rozwiązania:

  • używając CTRL-R * do wklejenia na pozycję kursora (i utrzymanie zawartości schowka multi-lined)
  • zrobić ponowne odwzorowanie polecenia wklejania w celu zastąpienia wszystkich powrotów karetki w ciągu schowka

Odpowiedz

9

Przede wszystkim wydaje się, CTRL-V jest mapowany do czegoś, bo normalnie wklejając w VIM nie odbywa się za pomocą CTRL-V (CTRL-V to blok optyczny).

Po drugie, obserwowane zachowanie jest standardowym zachowaniem [m], jeśli naciągniesz jedną lub więcej całych linii, wklejenie zawsze spowoduje powstanie jednej lub więcej linii powyżej lub poniżej bieżącego wiersza.

Nie znam żadnego wbudowanego sposobu osiągnięcia tego, co próbujesz zrobić. Ale zawsze można przemapować CTRL + V, aby coś, co ma robić, co chcesz, czyli

:map <C-V> i<CR><Esc>"*P 

Po że wklejanie wielu linii będzie pomiędzy znakami kursor był na, ale to odwzorowania prawdopodobnie nie jest to, co chcesz w inne przypadki.

EDIT

OK, znalazłem inny sposób.

W trybie wstawiania, typ

CTRL-R * 

będzie pasty zawartość bufora schowka w miejscu kursor znajduje się na. (Można również użyć tego, aby wkleić zawartość innych buforów)

+0

Ah, w końcu ktoś, kto zrozumiał mój problem :-) Widzę, co próbujesz zrobić, i rzeczywiście jest to tylko półobsługowe obejście. Dziwne, że vim nie może tego znieść Właściwie nie ma sposobu, aby usunąć powraca karetki w buforze (schowek) przed wklejeniem go do VIM? (BTW: niestandardowy skrót ctrl-v nie jest tutaj problemem) – Rabarberski

+1

Ah, twój CTRL-R * aktualizacja robi to dla mnie! – Rabarberski

1

Skróty p i P (wklej odpowiednio kursor i przed nim). Dodaj "*, aby określić zawartość rejestru systemowego (schowek Windows, w twoim przypadku) lub "+ (dla systemu UNIX).

Tak, można użyć:

  • "*p pasta przed kursorem
  • "*P pasta po kursora
  • "*y kopiowania (obszar wizualny, albo bierze postfix informujący Vima "co", aby skopiować)
  • "*d cięcie (obszar wizualny lub z postfiksem)

i tak dalej.

+0

P i P pasty z bufora VIM, a nie ze schowka Windows, więc to nie działa w tym przypadku. – Rabarberski

+0

Utracono tę część, edytowano w celu dodania informacji. –

+0

Hmm, dzięki za cynk, ale to nadal nie działa. Zostanie wklejony POWYŻEJ linii, na której jestem ustawiony, zamiast na pozycji kursorów – Rabarberski

1

Aby wkleić do gVim ze schowka Windows w pozycji kursora, użyj:

"+gP
Nie zapomnij podwójnego cudzysłowu.

+0

Pytanie nie było jak wklejać, ale jak wklejać kursor, ponieważ zawartość schowka zawiera dwie linie (oddzielone znakiem powrotu karetki) – Rabarberski

+0

Wierzę Zrozumiałem twoje pytanie. Mówisz, że próbowałeś "+ gP i to nie zadziałało? To dla mnie." –

+0

Zaktualizowałem moją odpowiedź tak, aby bezpośrednio odpowiadała na twoje pytanie –

1
:set paste 

przed wkleić coś do bufora

:set nopaste 

przywrócić ustawienia formatowania

+0

miła próba, ale nie działa dla mnie. 2 linie nadal są wklejane PONIEŻDĄ bieżącą linię – Rabarberski

2

Jeśli chcesz rozebrać nowe linie z rejestru przed wklejeniem z niego, można użyć wyrażenie zarejestrować "=:

:map <C-v> "=substitute(@*, "\n", " ", "g")<CR>p 
+0

Bardzo dobra porada.Moe eksperymentowanie zdało mi się uświadomić, że działa to tylko wtedy, gdy NIE jest w trybie wstawiania, ale mogę użyć: imap do mapowania tam również. Dzięki! – Rabarberski

+0

Mały update: zmieniłem twoje rozwiązanie, używając P zamiast p na końcu polecenia mapowania. To wkleja go po kursorze, co wydaje mi się bardziej naturalne. – Rabarberski