2

Скажем, что текущая строка в Vim содержит:

ls /home

(или любая другая команда оболочки). Итак, как быстро отправить эту строку в оболочку (bash) и прочитать результаты в Vim? И без использования плагинов.

2 ответа2

5

Самый простой способ это поставить :! в начале строки (с I:!), затем yy чтобы вставить строку в безымянный регистр и, наконец, использовать @" для вызова безымянного (") регистра в качестве макроса. Для vim, это в точности эквивалентно вводу

:!ls /home

в обычном режиме. Если, как и я, у вас есть ; и : переключитесь в вашем .vimrc для нормального режима, вам придется вместо этого вставить точку с запятой.

Вероятно, можно изменить регистр на месте, а не добавлять его к фактической строке.


Это также возможно сделать, нажав y$ yanking до конца строки (без вышеуказанного редактирования), затем набрав

:!<c-r>"

...(<c-r> означает Ctrl+r), который расширится до

:!ls /home

(или какой бы командой вы ни дернули). Вам нужно использовать y$ а не yy потому что в противном случае он расширится до

:ls /home^M

^M там, представляющий новую строку; это достаточно легко удалить с помощью одного возврата.

Этот второй метод может быть немного быстрее, но все, что включает в себя клавишу Ctrl, кажется мне немного непривлекательным.

0

Вы можете отправить текущую строку как команду, просто вызвав:

:.!bash -e

Строка в открытом буфере будет заменена выводом этой команды.

Если вы предпочитаете сохранить исходную строку, вы можете отправить вывод в другой буфер с помощью:

:.w !bash -e

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .