Как поменять порядок строк в Vim?

например, если у меня есть четыре строки следующим образом:

первая строка

вторая строка

третья строка

четвертая строка

Я хочу обратить их в

четвертая строка

третья строка

вторая строка

первая строка

Как я могу сделать это в vim?

84
задан sblair 2010-09-18 03:57:13
источник

6 ответов

обратить все строки в файле,

:g/^/m0

объяснение см.

:help 12.4

, который также показывает, как обратить всего несколько строчек.

82
отвечен garyjohn 2010-09-18 04:35:44
источник

выберите нужные строки, нажмите !, и в результирующем приглашении проведите линии через tac a la :'<,'>!tac. См.man tac для более подробной информации.

62
отвечен Rhys Ulerich 2012-08-16 18:01:52
источник

на Mac OS X,tac не существует, но вы можете использовать tail -r эффект:

:%!tail -r

Это также хорошо работает для визуального режима:

:'<,'>!tail -r

фрагмент tail(1)manpage:

параметр-r приводит к отображению ввода в обратном порядке, по линия. Кроме того, эта опция изменяет значение-b, - c и - n вариантов. Если указан параметр-r, эти параметры задают количество байтов, строк или 512 байт блоки для отображения, вместо байты, линии или блоки от начала или конца входного сигнала от с чего начать показ. по умолчанию для параметра-r отображение всех входных данных.

29
отвечен Thomas Perl 2013-06-03 21:18:00
источник

для тех, кто более комфортно с визуальным режимом:

1. Определите номер строки над выделением, которое вы хотите перевернуть, используя :set nu.

2. Shift-V, чтобы выделить выбор, который вы хотите перевернулся (визуальный режим).

3. :g/^/m <Line number from step 1>.

обратите внимание, что в визуальном режиме, он будет автоматически отображаться как :'<,'>g/^/m <Line number> при вводе команды из 3.

эта команда работает, перемещая выделение по одной строке за раз в номер строки, которая ты даешь это. Когда второй элемент помещается в заданный номер строки, он перемещает первый вниз до номера строки + 1. Затем третий толкает первый и второй вниз и так далее, пока весь список не был помещен в одну строку, что приводит к обратному упорядоченному списку.

3
отвечен horta 2016-06-14 16:39:31
источник

команда :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 )

2
отвечен Aaron Thoma 2017-01-12 21:31:43
источник

допустим, вы находитесь в строке 3, следовательно, у нас есть диапазон от 3 до 6. Просто ввести.

:3,6g/^/m2
1
отвечен SergioAraujo 2018-02-17 14:03:14
источник

Другие вопросы vim text-editors text-editing editing

X