Например, если у меня есть четыре строки следующим образом:
первая строка
вторая строка
третья строка
четвертая строка
Я хочу обратить их
четвертая строка
третья строка
вторая строка
первая строка
Как я мог сделать это в Vim?
vim
editing
text-editors
text-editing
Jichao
источник
источник
:command! -bar -range=% Reverse <line1>,<line2>global/^/m<line1>-1
vi.stackexchange.com/a/2107/10254Ответы:
Чтобы перевернуть все строки в файле,
Для объяснения см.
который также показывает, как обратить вспять только диапазон линий.
источник
ma
), 2. переместите курсор на первую строку блока, 3. введите:'a,.g/^/m 'a
Выберите нужные строки, нажмите
!
, и в появившейся подсказке направьте линии черезtac
а-ля:'<,'>!tac
. Смотритеman tac
для более подробной информации.источник
shift+v
для входа в режим визуальной линии, а затем,j
чтобы добавить линии к выделению.gvim
! В противном случае вы должны использовать абсолютные номера строк (возможно, вы можете использовать относительные, но вы должны быть осторожны) с:g/^/m0
(что также очень трудно запомнить) ... Так что, по сути, tac должен быть с vim независимо от платформы вы, НО это не 100% vimscript, НО кому какое дело: P:.,'a!tac
с минимальными усилиями.shift+v
вы можете использовать,}
чтобы добраться до следующего абзаца или пустого вертикального пространства. Такжеman tac: concatenate and print files in reverse
.В Mac OS X
tac
не существует, но вы можете использоватьtail -r
для того же эффекта:Это также хорошо работает для визуального режима:
Выдержка из
tail(1)
справочной страницы:источник
alias tac='tail -r'
brew install coreutils
и использоватьgtac
.Для тех, кто более удобен в визуальном режиме:
1. Определите номер строки над выбором, который вы хотите перевернуть
:set nu
.2.
Shift-V
выделить выделение, которое вы хотите перевернуть (визуальный режим).3
:g/^/m <Line number from step 1>
..Обратите внимание, что в визуальном режиме он будет автоматически отображаться, как
:'<,'>g/^/m <Line number>
при вводе команды из 3.Эта команда работает, перемещая выделенную строку за раз в номер строки, который вы ей даете. Когда второй элемент помещается в заданный номер строки, он выталкивает первый вниз до номера строки + 1. Затем третий толкает первый и второй вниз и так далее, пока весь список не будет помещен в один номер строки, что приводит к в обратном порядке список.
источник
'<
вместо ввода номера строки вручную. Просто начните выделение на одну строку раньше и выполните:'<,'>g/^/m'<
.Команда
:Rev[erse]
и дополнительные сопоставления для васvimrc
, так что вам не нужно запоминать и выполнять неочевидные шаги этого рецепта:(
:xmap
отображается для визуального, но не для режима выбора, как:help mapmode-x
рекомендуется для отображения печатных символов.)(Основано на: http://tech.groups.yahoo.com/group/vim/message/34305 )
источник
:'<,'>g/^/m'<
:):-1,+1Rev
что вы ищете? Знайте , что вы можете визуально выбрать диапазон , который вы хотите отменить, например:V7j:Rev
. Если это не отвечает на ваш вопрос, я не поняла его, поэтому вам нужно уточнить или перефразировать его для меня.Допустим, вы находитесь на линии 3, поэтому у нас диапазон от 3 до 6. Просто введите.
источник
:,6g/^/m2
; или когда на последней линии полигона::3,g/^/m2
; и:3,6g/^/m2
работает из любого места в файле.