Vim: всплить и запустить внешнюю команду - PullRequest
0 голосов
/ 30 июня 2018

Я пытаюсь отобразить команду или функцию, которая разбивает новое окно по вертикали, переключает курсор на новое окно и запускает внешнюю команду для <cWORD>.

Когда я делаю:

:vsplit|wincmd w|execute '!perldoc <cWORD>'

Кажется, что Vim запускает внешнюю команду сначала в текущем окне, а затем, когда команда завершается, Vim создает новое окно и переключает на него фокус.

Если я разбью эти команды на отдельные строки в функции и вызову функцию, произойдет то же самое. Есть ли способ заставить Vim делать то, что я хочу?

Ответы [ 2 ]

0 голосов
/ 02 июля 2018

Мой коллега Тай показал мне, как это сделать:

let w=expand("<cWORD>") | vnew | execute "read !perldoc " . w|1

  • Сохранить <cWORD> как переменную w
  • vnew открывает новое пустое окно
  • выполнить read !perldoc, передав w в качестве переменной. Вывод читается в новое окно
  • Перейти к первой строке буфера в новом окне
0 голосов
/ 02 июля 2018
  1. Если вы не укажете Vim иначе, новые вертикальные окна по умолчанию открываются слева, оставляя курсор в новом окне.

    :vsplit

    Если это не то, что вы испытываете, вы должны обязательно выяснить, почему.

  2. После :vsplit дальнейшие команды выполняются до визуализации нового окна, что можно представить как «виртуальное окно».

    Это означает, что, как бы тревожно это ни было, вы не увидите новое окно до следующей команды. Вот как работает Vim, и с этим ничего не поделаешь.

    В приведенном ниже примере ...

    • У меня есть два perl-файла в одном каталоге,
    • в perl.pl есть пример сценария perl, который я нашел в сети,
    • в warnings.pl есть одно слово, warnings,
    • perl.pl открывается в Vim с курсором на strict,
    • Я бегу :vsplit|!perldoc <cWORD>,
    • Я ожидаю увидеть документацию по strict в моем пейджере и тот же буфер, отображаемый в двух вертикальных окнах, когда я вернусь в Vim,
    • Я закрываю левое окно,
    • Я бегу :vsplit warnings.pl|!perldoc <cWORD>,
    • Я ожидаю увидеть документацию по warnings в моем пейджере и двух разных буферах, отображаемых в двух вертикальных окнах, когда я вернусь в Vim.

    Посмотрим:

    :vsplit2

    Похоже, что все работает как ожидалось.

  3. Я не вижу ничего, но у вас, вероятно, есть веская причина открыть это новое окно. Я все равно предложу :help K и :help 'keywordprg:

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