Как объединить две команды Vim в одну (команда не привязка клавиш) - PullRequest
0 голосов
/ 08 октября 2018

Я нашел несколько вопросов о переполнении стека, говорящих об этом, но все они касаются только команд :nmap или :noremap.Я хочу команду, а не просто связывание клавиш.Есть ли способ сделать это?

Вариант использования:

Когда я запускаю :make, я не сохраняю автоматически.Поэтому я хотел бы объединить :make и :w.Я хотел бы создать команду :Compile / :C или :Wmake для достижения этой цели.

Ответы [ 3 ]

0 голосов
/ 08 октября 2018

Общая информация о сцеплении Ex-команды с помощью | может быть найдена в :help cmdline-lines.

. Вы можете применить это для интерактивных команд, в отображениях и в пользовательских командах какну.

Обратите внимание, что вам нужно использовать только специальные <bar> в отображениях (чтобы избежать преждевременного завершения определения отображения и немедленного выполнения оставшейся части, ошибка часто встречающегося новичка: :nnoremap <F1> :write | echo "This causes an error during Vim startup!"<CR>).Для пользовательских команд вы можете просто написать |, но имейте в виду, какие команды видят в этом свой аргумент.

:help line-continuation поможет с чрезмерно длинными определениями команд.Перемещение нескольких команд в отдельную :help :function также может помочь (но учтите, что это слегка меняет обработку ошибок).

arguments

Если вы хотите передать customаргументы командной строки, вы можете добавить -nargs=* к вашему определению :command и затем указать точку вставки с правой стороны с помощью <args>.Например, чтобы разрешить команды для вашей команды :write, вы можете использовать

:command -nargs=* C w <args> | silent make | redraw!
0 голосов
/ 08 октября 2018

Вы можете комбинировать команды с |, см. Справку для :bar:

command! C update | silent make | redraw!

Однако, есть более чистый способ достичь того, что вы хотите.Просто включите опцию 'autowrite' для автоматической записи измененных файлов до :make:

                                 'autowrite' 'aw' 'noautowrite' 'noaw'
'autowrite' 'aw'        boolean (default off)
                        global
        Write the contents of the file, if it has been modified, on each
        :next, :rewind, :last, :first, :previous, :stop, :suspend, :tag, :!,
        :make, CTRL-] and CTRL-^ command; and when a :buffer, CTRL-O, CTRL-I,
        '{A-Z0-9}, or `{A-Z0-9} command takes one to another file.
        Note that for some commands the 'autowrite' option is not used, see
        'autowriteall' for that.

Эта опция упоминается в справке для :make.

0 голосов
/ 08 октября 2018

Я нашел решение после проб и ошибок.

Решение для моего варианта использования

command C w <bar> silent make <bar> redraw!

Это для компиляции с использованием make и печативыводить только при наличии ненулевого вывода.

Общее решение

command COMMAND_NAME COMMAND_TO_RUN

Где COMMAND_TO_RUN может быть построено с использованием более чем одной команды с использованием следующей конструкции.

COMMAND_1_THAN_2 = COMMAND_1 <bar> COMMAND_2

Вы можете использовать это несколько раз, и это очень похоже на трубы в оболочке.

...