Запустить терминальную команду из VIM? - PullRequest
2 голосов
/ 20 декабря 2010

Я хочу написать функцию, которую я могу добавить в мой файл .vimrc, который будет вызывать команду терминала, а затем связать ее с <leader>u.

Не могу заставить ее работать, хотя.Я считаю, что могу использовать функцию system (), но документации очень мало, и, похоже, я не могу заставить ее работать.

Рассматриваемая команда терминала - git push origin master '.

Я знаю, что для git доступны плагины, но я не ищу ни одного из них, просто простая функция для привязки команды терминала к комбинации клавиш.

function gitPush()
 system("git push origin master")
endfunction
:nmap <leader>u :call gitPush()

Я знаю, что это не так, но vim, похоже, не хочет делать документацию очень доступной.

Ty

Ответы [ 2 ]

7 голосов
/ 20 декабря 2010
function GitPush()
    !git push origin master
endfunction

Способ запуска команды в подоболочке.

РЕДАКТИРОВАТЬ: пользовательские функции должны начинаться также с заглавной буквы;)

1 голос
/ 20 декабря 2010

Почему вы используете call для вызова своей собственной функции и не можете использовать ее для встроенной функции?Это одна из трех ошибок, другая была упомянута @Richo: пользовательская функция должна начинаться с заглавной буквы или с b:, w:, t: (обратите внимание, что ни одна из этих функций не является локальной), g:, s: (только внутри сценариев, вам придется заменить s: на <SID> в отображениях), даже \w: (например, function _:foo() работает) или {filename_without_extension}# (если имя файла соответствует \w+.vim).Если это анонимная функция:

let dict={}
function dict["foo"]()
endfunction
function dict.bar()
endfunction

, также не требуется начинать с заглавной буквы.Итак, правильное решение:

function g:gitPush()
  call system("git push origin master")
endfunction
nnoremap <leader>u :call g:gitPush()<CR>

Третья ошибка не указана <CR>.Я изменил nmap на nnoremap, потому что по возможности хорошо использовать nore.Наличие : в начале команды не повредит и не является ошибкой, но я просто не пишу это: в отображениях обычного режима требуется запуск командного режима, но не внутри сценариев.

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