например, если у меня есть четыре строки следующим образом:
первая строка
вторая строка
третья строка
четвертая строка
Я хочу обратить их в
четвертая строка
третья строка
вторая строка
первая строка
Как я могу сделать это в vim?
например, если у меня есть четыре строки следующим образом:
первая строка
вторая строка
третья строка
четвертая строка
Я хочу обратить их в
четвертая строка
третья строка
вторая строка
первая строка
Как я могу сделать это в vim?
обратить все строки в файле,
:g/^/m0
объяснение см.
:help 12.4
, который также показывает, как обратить всего несколько строчек.
выберите нужные строки, нажмите !
, и в результирующем приглашении проведите линии через tac
a la :'<,'>!tac
. См.man tac
для более подробной информации.
на Mac OS X,tac
не существует, но вы можете использовать tail -r
эффект:
:%!tail -r
Это также хорошо работает для визуального режима:
:'<,'>!tail -r
фрагмент tail(1)
manpage:
параметр-r приводит к отображению ввода в обратном порядке, по линия. Кроме того, эта опция изменяет значение-b, - c и - n вариантов. Если указан параметр-r, эти параметры задают количество байтов, строк или 512 байт блоки для отображения, вместо байты, линии или блоки от начала или конца входного сигнала от с чего начать показ. по умолчанию для параметра-r отображение всех входных данных.
для тех, кто более комфортно с визуальным режимом:
1. Определите номер строки над выделением, которое вы хотите перевернуть, используя :set nu
.
2. Shift-V
, чтобы выделить выбор, который вы хотите перевернулся (визуальный режим).
3. :g/^/m <Line number from step 1>
.
обратите внимание, что в визуальном режиме, он будет автоматически отображаться как
:'<,'>g/^/m <Line number>
при вводе команды из 3.
эта команда работает, перемещая выделение по одной строке за раз в номер строки, которая ты даешь это. Когда второй элемент помещается в заданный номер строки, он перемещает первый вниз до номера строки + 1. Затем третий толкает первый и второй вниз и так далее, пока весь список не был помещен в одну строку, что приводит к обратному упорядоченному списку.
команда :Rev[erse]
и необязательные сопоставления для vimrc
, Так что вам не придется запоминать и выполнять неочевидные шаги по этому рецепту:
" Reverse the lines of the whole file or a visually highlighted block.
" :Rev is a shorter prefix you can use.
" Adapted from http://tech.groups.yahoo.com/group/vim/message/34305
command! -nargs=0 -bar -range=% Reverse
\ let save_mark_t = getpos("'t")
\<bar> <line2>kt
\<bar> exe "<line1>,<line2>g/^/m't"
\<bar> call setpos("'t", save_mark_t)
nmap <Leader>r :Reverse<CR>
xmap <Leader>r :Reverse<CR>
(:xmap
карты для визуального, но не Выберите режим, как :help mapmode-x
советует для отображения печатных символов.)
(основан на: http://tech.groups.yahoo.com/group/vim/message/34305 )
допустим, вы находитесь в строке 3, следовательно, у нас есть диапазон от 3 до 6. Просто ввести.
:3,6g/^/m2
Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]