gvim: передача визуально выделенного текста в командную строку - PullRequest
5 голосов
/ 18 января 2011

Я использую gvim для хранения рецептов команд, которые я буду выполнять, в зависимости от вывода.В настоящее время я выбираю текст в gvim и вставляю команды в консоль терминала, но держу пари, что есть способ передать визуально выбранный диапазон в командную строку для выполнения.

Ответы [ 2 ]

17 голосов
/ 18 января 2011

Предполагается, что вы имеете в виду командную строку Vim:

(если вы имеете в виду командную строку ОС, см. Ниже).

Для частей строк (т.е. без символа конца строки) вы можете сделать что-то вроде этого:

" Visually select lines, then:
y:<C-R>"<ENTER>

, где <C-R> означает нажатие Ctrl + R . y 'дергает' выделенный текст, : входит в командный режим, <C-R>" вытягивает содержимое регистра " (последний набранный текст) в командную строку и <ENTER> (очевидно) запускает команду .


Если вы хотите сделать что-то построчное, это немного сложнее (поскольку командной строке не нравятся ^M s в команде). Я бы порекомендовал что-то подобное в вашем vimrc:

function! RunCommands()
    exe getline('.')
endfunction
command -range RunCommands <line1>,<line2>call RunCommands()
vmap ,r :RunCommands<CR>

Выберите строки (после перезапуска vim) и нажмите ,r.


Еще один способ, который может оказаться полезным, - скопировать нужные строки, нажать q:, чтобы открыть окно командной строки и вставить туда нужные строки, а затем переместить курсор на нужную строку и нажать * 1030. * ENTER . Преимущество заключается в том, что вы можете редактировать команду перед нажатием ENTER . Одновременно будет выполняться только одна команда.

Если вы имеете в виду (например, командную строку Windows или Linux):

Используйте функцию, которую я перечислил выше, но вместо:

exe getline('.')

использование

call system(getline('.'))

или, если вы хотите увидеть результат:

echo system(getline('.'))

или

echomsg system(getline('.'))

Для получения дополнительной информации:

:help :echo
:help :echomsg
:help :messages

:help :vmap
:help :command-range
:help :command
:help :function

:help c_CTRL-R
:help :exe
:help getline()
:help system()
2 голосов
/ 18 января 2011

Если вы используете графический интерфейс vim, вы можете сделать set guioptions+=a. Таким образом, любой выделенный текст внутри gvim в визуальном режиме вставляется в буфер обмена.

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