Команды, выполняемые из vim, не распознают псевдонимы команд bash


Я использую 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 77

5 ответов:

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

:set shellcmdflag=-ic

чтобы сделать ВИМ :! оболочка ведет себя как ваша командная строка.

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

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

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

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

let $BASH_ENV = "~/.bash_aliases"

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

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

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

Я знаю, это может быть старый вопрос, но ни один из ответов не работал для меня, как хотелось бы. Итак, для тех, кто пришел сюда из googling и для пользователей (Oh-my -) zsh:

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

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

Так $ cp ~/.zshrc ~/.zshenv будет делать это.

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