2012-01-24 22 views
38

biegnę vim 7.3 na Mac 10.7.2 i mam pewne problemy wycinanie i wklejanie wielu liniach.Wytnij i wklej wielu linii w vim

Na mojej starej instalacji systemu Linux (który został skradziony, więc nie wiem wersje), mogę wpisać „dd” kilka razy, a następnie „p” będzie szarpać wszystkie z nich z powrotem. Na przykład: wpisz: "dd dd", a dwa wiersze zostaną usunięte. Teraz wpisz "p" i zarówno linie są wklejane z powrotem do bufora.

Wiem, że mogę osiągnąć to, co chcę, wpisując "2dd", a następnie "p" - ale chciałbym móc "dd" -out linie bez liczenia liczby linii przed czasem.

Wszelkie pomysły?

+2

Nie liczą linie naprzód użyć „relativenumbers”, aby wyświetlić numery linii w stosunku do kursora. Zaczynając od ustawienia 7.4, oba "liczby" i "względne liczby" tworzą numer wiersza, w którym kursor jest bezwzględny, a pozostałe względne, uzyskując najlepsze z obu światów. Wtedy łatwiej jest to zrobić, np. @Giovanni zasugerował d2d (dla dwóch linii). –

+1

To jest niesamowite, ale dla każdego, kto to wypróbuje, jest to w rzeczywistości "liczba" i "względna liczba", a nie "liczby" i "względne liczby" :) – user3640967

Odpowiedz

75

Czy bierzesz za pomocą visual mode?

Można po prostu pójść:

  • Prasa V
  • Zaznacz wszystko, co chcesz wyciąć bez liczenia
  • Naciśnij d
  • Idź, gdzie chcesz wkleić
  • Naciśnij p

Powinno to spowodować około o połowę mniej naciśnięć klawiszy niż metoda dd od momentu naciśnięcia jednego klawisza na linię zamiast dwóch. Punkty premiowe, jeśli używasz 5j (lub podobnej), aby wybrać wiele linii naraz.

+9

Dla pełnych linii łatwiej używać "V" (Shift + V). –

+0

Dobra robota @GregHewgill, edytowana z twoją sugestią. –

+1

Powiedziałem, że nie chciałem tego robić, ponieważ "lubiłem" mój stary work-flow. Ale po prostu próbowałem i jest o wiele lepiej. Dzięki! – spinlock

5

Nie jestem pewien, czy jest to na tyle blisko, co starasz, ale jedno można zrobić, to użyć określonego rejestru i wykorzystać swoją nazwę rejestru. To mówi vim, aby dołączyć do rejestru zamiast zastąpić go, więc jeśli masz wiersze:

one 
two 
three 

można wprowadzić

"qdd 
"Qdd 
"Qdd 

a następnie następnie jeśli wpiszesz

"qp 

będzie wkleić z powrotem oryginalne linie

+0

Z pytania wygląda na to, że zostało zamapowane na 'd'. – romainl

1

zgadzam się z @Ben S., że to jest preferowanym sposobem ACCO mplish to, ale jeśli chcesz tylko powtórzyć swoje stare zachowanie, możesz zmapować dd, aby dołączyć do określonego rejestru, a następnie zmapować p, aby wkleić z tego rejestru i wyczyścić go.
ten będzie miał tę wadę, powodując p tylko do pracy z rzeczy usunięte przy użyciu dd (używając d} usunąć do końca akapitu nie umieścić tekst w odpowiednim rejestrze, który zostanie wklejony później).

Dodaj następujące do vimrc

noremap dd "Ddd    "Appends the contents of the current line into register d 
noremap p "dp:let @d=""<CR> "Pastes from register d and then clears it out 

jeśli nie chcesz wklejanie aby usunąć zawartość rejestru

noremap p "dp    "Paste from register d 

ale to spowoduje, że zarejestrować się rozwijać bez kiedykolwiek rozliczeń to się

2

aby wyciąć i wkleić numerami linii (zrobić :set number zobaczyć numery linii) dla linii X do Y zrobić:

:x,yd 

lub jeśli kursor znajduje się już na linii X, zrobić

:,yd 

Następnie przejdź do miejsca, gdzie chcesz wkleić i naciśnij p

13

można wpisać:

d<n>d 

gdzie <n> to liczba linii, które chcesz wyciąć, a następnie możesz wkleić je za pomocą:

p 

Na przykład, aby wyciąć i wkleić 3 linie:

d3d 
p 
+0

świetna odpowiedź dziękuję – kapil

Powiązane problemy