przenieś zaznaczenie do osobnego pliku


12

W vimie, jak mogę przenieść fragment tekstu do nowego pliku? Na razie robię to:

  • wybierz tekst
  • posługiwać się :w new_file
  • wybierz tekst ponownie
  • usuń tekst

Czy istnieje bardziej skuteczny sposób to zrobić?

Przed

a.txt

sometext
some other text
some other other text
end

Po

a.txt

sometext
end

b.txt

some other text
some other other text

Odpowiedzi:


4

Co z tymi niestandardowymi poleceniami:

:command! -bang -range -nargs=1 -complete=file MoveWrite  <line1>,<line2>write<bang> <args> | <line1>,<line2>delete _
:command! -bang -range -nargs=1 -complete=file MoveAppend <line1>,<line2>write<bang> >> <args> | <line1>,<line2>delete _

1
To jest bardzo brzydkie, ale hej, wydaje się, że robi to w jednym kroku dokładnie to, o co prosiłem (próbowałem). +1 i zaakceptowane. Szukałem natywnego sposobu, aby to zrobić szybko, ale ponieważ nie wydaje się, że taki jest, twój będzie w porządku. Dzięki!
greg0ire

1
Piękno jest w oku patrzącego. Uważam to za dość eleganckie; wystarczy wpisać go tylko raz (w .vimrc).
Ingo Karkat

Masz rację, „bardzo brzydkie” uczucie było „bardzo nieznane”. Twoje polecenie jest bardzo przydatne i myślę, że na pewno wyrzeźbię je w moim .vimrc
greg0ire

8

Przez „przenieś kawałek tekstu do nowego pliku” zakładam, że masz na myśli wycięcie tego fragmentu tekstu z bieżącego pliku i utworzenie nowego pliku zawierającego tylko ten tekst.

Różne przykłady:

  • :1,1 w new_file aby utworzyć nowy plik zawierający tylko tekst z wiersza nr 1
  • :5,50 w newfile aby utworzyć nowy plik zawierający tekst od wiersza 5 do wiersza 50
  • :'a,'b w newfileaby utworzyć nowy plik zawierający tekst od znaku ado znakub
    • ustaw swoje oceny za pomocą mai mbgdziekolwiek chcesz

Powyższe kopiuje tylko tekst i tworzy nowy plik zawierający ten tekst. Następnie będziesz musiał usunąć.

Można to zrobić przy użyciu tego samego zakresu i dpolecenia:

  • :5,50 d aby usunąć tekst z linii 5 do linii 50
  • :'a,'b daby usunąć tekst od znaku ado znakub

Lub za pomocą ddprzypadku pojedynczej linii.

Jeśli zamiast tego zaznaczysz tekst w trybie wizualnym, a następnie wciśniesz, :gdy tekst jest zaznaczony, w wierszu komend zobaczysz:

:'<,'>

Który wskazuje wybrany tekst. Następnie możesz rozwinąć polecenie do:

:'<,'>w >> old_file

Który doda tekst do istniejącego pliku. Następnie usuń jak wyżej.


Jedna wkładka:

:2,3 d | new +put! "

Podział:

  • :2,3 d - usuń wiersze od 2 do 3
  • | - technicznie to przekierowuje wyjście pierwszego polecenia do drugiego polecenia, ale ponieważ pierwsze polecenie niczego nie wypisuje, po prostu łączymy łańcuch poleceń
  • new - otwiera nowy bufor
  • +put! "- umieść zawartość nienazwanego rejestru ( ") w buforze
    • Bang ( !) jest tak, że zawartość jest umieszczana przed bieżącą linią. Powoduje to i pusty wiersz na końcu pliku. Bez tego na górze pliku jest pusta linia.

Twoje założenie jest słuszne. To wygląda dobrze, zamierzam przetestować. Czy mógłbyś wyjaśnić 2. trochę więcej? Nie bardzo znam zakresy. EDYCJA: Jeśli spróbuję tego w drugim wierszu, zapisuje pierwszy wiersz w innym pliku, a nie w drugim wierszu.
greg0ire

@ greg0ire Mam to trochę wstecz, edytuję, aby lepiej wyjaśnić
embedded.kyle

Dodałem przykład, aby wyjaśnić moje pytanie.
greg0ire

@ greg0ire Poprawiłem swoją odpowiedź. To wciąż dwa kroki. Pierwsze egzemplarze i pisze. Drugi usuwa.
embedded.kyle

1
Fajne rozwiązanie! Możesz również napisać to '<,'>d | new | 0put "dla jasności.
atripes

1

W oparciu o odpowiedź @ embedded.kyle i niniejsze pytania , skończyłem z tym jednym linijkiem, aby dołączyć zaznaczenie do pliku i usunąć z bieżącego pliku. Po wybraniu niektórych linii za pomocą Shift+V, naciśnij :i uruchom:

'<,'>w >> test | normal gvd 

Pierwsza część dołącza wybrane linie. Drugie polecenie wchodzi w tryb normalny i uruchamia się, gvdaby wybrać ostatni wybór, a następnie usuwa.


0

Zaznacz tekst w trybie wizualnym, a następnie naciśnij, yaby „pociągnąć” go do bufora (kopiować) lub d„usunąć” do bufora (wyciąć).

Następnie możesz :split <new file name>podzielić okno vima i wcisnąć, paby wkleić szarpany tekst. Zapisz plik jak zwykle.

Aby ponownie zamknąć podział, przekaż podział, który chcesz zamknąć :q.


1
Mam w tej chwili 4 kroki: wybierz, napisz, wybierz, usuń. Z twoją metodą mam 6 kroków: wybierz, usuń, podziel, wklej, napisz, zamknij. Poprosiłem o coś bardziej wydajnego: P
greg0ire,

Cóż, jeśli :xzamiast tego przejdziesz podział , możesz połączyć pisanie i zamykanie w jeden i zrobić pięć kroków. : P
Xyon

Tak jest lepiej, ale 5 wciąż> 4: P
greg0ire 23.01.2013
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.