переместить курсор на следующую строку после ввода из команды фильтра в vim - PullRequest
2 голосов
/ 06 августа 2011

В vim я фильтрую, скажем, текущую строку, используя !! через команду Unix. Для этого я определил следующий ярлык в .vimrc

:map <Enter>  !!mycommand<CR>:,+1<CR>

Нажатие <Enter> переводит меня на строку ниже текущего, если mycommand заменяет мою единственную входную строку ровно на одну выходную строку. Если в выводе будет больше строк (число строк неизвестно до выполнения команды), он все равно перенесет меня на строку ниже текущей. Теперь я хотел бы знать, как я всегда могу добраться до первой строки под вставленным выводом mycommand.

Модифицированный ярлык позволил бы мне «построчно» исполнять текстовый файл, используя <Enter>, каждый раз отображая вывод. Если нет способа сделать это без какого-либо предварительного знания о выводе mycommand, возможно, есть кто-то, кто знает, скажем, первый символ каждой строки вывода.

Большое спасибо!

1 Ответ

2 голосов
/ 06 августа 2011

Вы можете использовать специальные отметки '[ и '], которые отмечают начало и конец последнего измененного (или дерганого) текста.Измените вашу карту на:

:map <Enter>  !!mycommand<CR>']+

Обратите внимание, что я использую + вместо вашей бывшей команды.Это позволит перейти к первому непустому символу в следующей строке.Если это не то, что вы хотите, вы можете попробовать просто j или использовать более короткую версию вашей исходной карты:

:map <Enter>  !!mycommand<CR>']:+1<CR>

Вам не нужна запятая, чтобы сделать этодиапазон.Эта команда является просто упрощенной :#, где # - номер строки для перехода.Здесь вы можете использовать ., что означает «текущая строка», а затем :.+1 переходит на следующую строку.Но вы можете опустить точку, и поэтому :+1 делает то же самое.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...