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

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

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


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


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


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

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

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


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


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


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

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

12
задан sblair
12.01.2023 8:42 Количество просмотров материала 2724
Распечатать страницу

6 ответов

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

:g/^/m0

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

:help 12.4

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

82
отвечен garyjohn 2023-01-13 16:30

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

62
отвечен Rhys Ulerich 2023-01-13 18:47

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

:%!tail -r

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

:'<,'>!tail -r

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

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

29
отвечен Thomas Perl 2023-01-13 21:04

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

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

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

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

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

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

3
отвечен horta 2023-01-13 23:21

команда :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 2023-01-14 01:38

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

:3,6g/^/m2
1
отвечен SergioAraujo 2023-01-14 03:55

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх