Скажем, что текущая строка в Vim содержит:
ls /home
(или любая другая команда оболочки). Итак, как быстро отправить эту строку в оболочку (bash) и прочитать результаты в Vim? И без использования плагинов.
Самый простой способ это поставить :!
в начале строки (с I:!
), затем yy
чтобы вставить строку в безымянный регистр и, наконец, использовать @"
для вызова безымянного ("
) регистра в качестве макроса. Для vim, это в точности эквивалентно вводу
:!ls /home
в обычном режиме. Если, как и я, у вас есть ;
и :
переключитесь в вашем .vimrc для нормального режима, вам придется вместо этого вставить точку с запятой.
Вероятно, можно изменить регистр на месте, а не добавлять его к фактической строке.
Это также возможно сделать, нажав y$
yanking до конца строки (без вышеуказанного редактирования), затем набрав
:!<c-r>"
...(<c-r>
означает Ctrl+r), который расширится до
:!ls /home
(или какой бы командой вы ни дернули). Вам нужно использовать y$
а не yy
потому что в противном случае он расширится до
:ls /home^M
^M
там, представляющий новую строку; это достаточно легко удалить с помощью одного возврата.
Этот второй метод может быть немного быстрее, но все, что включает в себя клавишу Ctrl, кажется мне немного непривлекательным.
Вы можете отправить текущую строку как команду, просто вызвав:
:.!bash -e
Строка в открытом буфере будет заменена выводом этой команды.
Если вы предпочитаете сохранить исходную строку, вы можете отправить вывод в другой буфер с помощью:
:.w !bash -e