Команды, выполняемые из vim, не распознают псевдонимы команд bash. - PullRequest
88 голосов
/ 10 января 2011

Я использую bash на Mac, и один из псевдонимов выглядит так

alias gitlog='git --no-pager  log -n 20 --pretty=format:%h%x09%an%x09%ad%x09%s --date=short --no-merges'

Однако, когда я делаю

 :! gitlog

Я получаю

/bin/bash: gitlog: command not found 

Я знаю, что могу добавить псевдонимы, подобные этому, в моем .gitconfig

[alias]
    co = checkout
    st = status
    ci = commit
    br = branch
    df = diff

Однако я не хочу добавлять все мои псевдонимы bash в .gitconfig. Это не СУХОЙ.

Есть ли лучшее решение?

Ответы [ 5 ]

105 голосов
/ 10 января 2011

Bash не загружает ваш .bashrc, если он не интерактивный.Используйте

:set shellcmdflag=-ic

, чтобы оболочка :! Vim работала как ваша командная строка.

73 голосов
/ 06 ноября 2013

Я знаю, что на этот вопрос уже ранее "отвечали", но у меня проблема с ответом.Для оболочки не требуется , чтобы она была установлена ​​в Vim интерактивной.Посмотрите эту ветку для альтернативного ответа без необходимости выхода из интерактивной оболочки.

Если вы хотите неинтерактивную оболочку (по умолчанию), но расширение псевдонимов bash, поместите определения псевдонимов в файл, например.bash_aliases и явно включите расширение псевдонимов в этом файле:

shopt -s expand_aliases  
alias la='ls -la'

Затем добавьте это в ваш .vimrc, чтобы файл псевдонимов фактически читался каждый раз, когда вы запускаете команду оболочки из vim:

let $BASH_ENV = "~/.bash_aliases"

Это решение было предложено "Jakob".Смотрите ссылку ниже для оригинала.Я протестировал это на Mac OS X 10.9, и он работал безупречно!

vim - не распознавать псевдонимы в интерактивном режиме?

7 голосов
/ 05 марта 2012

Обратите внимание, что в зависимости от того, как настроены ваши bash-файлы, вы можете использовать опцию -l, а не -i.Это запустит оболочку как оболочку входа в систему.

5 голосов
/ 03 июля 2017

Я знаю, что это может быть старый вопрос, однако ни один из приведенных выше ответов не работал для меня так, как хотелось бы. Так что для тех, кто пришел сюда из Google и для (о-о-) пользователей Zsh:

Мое решение для этого было так же просто, как скопировать .zshrc в .zshenv - согласно http://zsh.sourceforge.net/Intro/intro_3.html:

`.zshenv 'создается во всех вызовах оболочки, если не задана опция -f. Он должен содержать команды для установки пути поиска команд, а также другие важные переменные среды. `.zshenv 'не должен содержать команд, которые производят вывод или предполагают, что оболочка присоединена к tty.

Так что $ cp ~/.zshrc ~/.zshenv сделает это.

2 голосов
/ 03 апреля 2013

Мне не очень удобно настраивать опцию -i, так как она имеет некоторое влияние, и я часто использую оболочку из vim.Вместо этого я бы сделал что-то вроде :!bash -c ". ~/.alias; gitlog"

...