Na przykład, jeśli mam cztery następujące linie:
pierwsza linia
druga linia
trzecia linia
czwarta linia
Chcę je odwrócić
czwarta linia
trzecia linia
druga linia
pierwsza linia
Jak mogę to zrobić w Vimie?
vim
editing
text-editors
text-editing
Jichao
źródło
źródło
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1
vi.stackexchange.com/a/2107/10254Odpowiedzi:
Aby odwrócić wszystkie linie w pliku,
Wyjaśnienie patrz
który pokazuje również, jak odwrócić tylko zakres linii.
źródło
ma
), 2. przesuń kursor do pierwszego wiersza bloku, 3. wpisz:'a,.g/^/m 'a
Wybierz żądane linie, naciśnij
!
, a następnie w wyświetlonym monicie poprowadź linie przeztac
la:'<,'>!tac
. Zobaczman tac
po więcej szczegółów.źródło
shift+v
aby przejść do trybu linii wizualnej, a następniej
dodaj linie do zaznaczenia.gvim
! W przeciwnym razie musisz użyć bezwzględnych liczb linii (być może możesz użyć względnego, ale musisz być ostrożny) z:g/^/m0
(co również jest naprawdę trudne do zapamiętania) ... Tak więc, zasadniczo, tac powinien być z vimem bez względu na platformę jesteś włączony, ALE to nie jest 100% vimscript, ALE kogo to obchodzi: P:.,'a!tac
działa przy minimalnym wysiłku.shift+v
możesz użyć,}
aby przejść do następnego akapitu lub pustej przestrzeni pionowej. Równieżman tac: concatenate and print files in reverse
.W systemie Mac OS X
tac
nie istnieje, ale można użyćtail -r
tego samego efektu:Działa to również ładnie w trybie wizualnym:
Fragment strony
tail(1)
man:źródło
alias tac='tail -r'
brew install coreutils
i używaćgtac
.Dla osób wygodniejszych w trybie wizualnym:
1. Zidentyfikuj numer linii powyżej zaznaczenia, którego chcesz obrócić
:set nu
.2.
Shift-V
aby podświetlić zaznaczenie, które chcesz przerzucić (tryb wizualny).3
:g/^/m <Line number from step 1>
.Zauważ, że w trybie wizualnym automatycznie pokaże się tak, jak
:'<,'>g/^/m <Line number>
po wpisaniu polecenia z 3.To polecenie działa poprzez przeniesienie zaznaczenia o jedną linię na raz na numer linii, który jej podałeś. Gdy drugi element zostanie wypchnięty do podanego numeru wiersza, przesuwa pierwszy w dół do numeru wiersza + 1. Następnie trzeci przesuwa pierwszy i drugi w dół i tak dalej, aż cała lista zostanie wypchnięta do pojedynczego numeru wiersza, w wyniku czego odwrócona lista uporządkowana.
źródło
'<
zamiast ręcznie wpisywać numer linii. Po prostu rozpocznij zaznaczenie o jedną linię wcześniej i wykonaj:'<,'>g/^/m'<
.Polecenie
:Rev[erse]
i opcjonalne mapowania dla twojegovimrc
, więc nie musisz pamiętać i wykonywać nieoczywistych kroków tego przepisu:(
:xmap
mapy dla trybu Visual, ale nie Select, zgodnie z:help mapmode-x
zaleceniami dotyczącymi mapowania znaków do wydrukowania).(Na podstawie: http://tech.groups.yahoo.com/group/vim/message/34305 )
źródło
:'<,'>g/^/m'<
:):-1,+1Rev
czego szukasz? Wiedz, że możesz wizualnie wybrać zakres, który chcesz odwrócić, npV7j:Rev
. : Jeśli to nie odpowiada na twoje pytanie, nie zrozumiałem go, więc musisz je dla mnie rozwinąć lub sformułować inaczej.Powiedzmy, że jesteś na linii 3, stąd mamy zakres od 3 do 6. Wystarczy wpisać.
źródło
:,6g/^/m2
; lub gdy na ostatniej linii poligonu::3,g/^/m2
; i:3,6g/^/m2
działa z dowolnego miejsca w pliku.