与从vim执行的命令相同的问题是没有识别bash命令别名,但是那里的解决方案不起作用.
我在〜/ .vimrc中设置了这些变量:
set shellcmdflag=-ic
set shell=/bin/bash\ -i
Run Code Online (Sandbox Code Playgroud)
我的〜/ .bash_aliases中有别名:
rgr() { if [ ! -z "$2" ]; then grep -rI --exclude=\*.svn\* "$1" * --include=$2 ; else grep -rI --exclude=*svn* "$1" * ; fi ; }
Run Code Online (Sandbox Code Playgroud)
从命令行执行时,它工作,但当我尝试从vim(:!rgr test)调用它时,我收到一条错误消息,vim退出:
bash: rgr: command not found
[4]+ Stopped vi ~/somefile
Run Code Online (Sandbox Code Playgroud)
如果我禁用交互模式,我只是得到"命令未找到"消息,并且vim不会退出.
如何让vim识别我的别名?我在OS X和Ubuntu上都重现了这种行为.
环境:debian9 + vim7.4.
cat .bashrc
add(){
echo $(expr $1 + $2)
}
Run Code Online (Sandbox Code Playgroud)
现在在vim中编辑一个文件
add 1 5
Run Code Online (Sandbox Code Playgroud)
在命令模式下运行它:w !bash,发生错误.
bash: line 1: add: command not found
shell returned 127
Run Code Online (Sandbox Code Playgroud)
1. set shellcmdflag=-ic 在/ etc/vim/vimrc和.bashrc以及.vimrc中添加.
2.reboot
3.vim test.sh
进入命令模式
:verbose set shellcmdflag
shellcmdflag=-ic
Last set from ~/.vimrc
Run Code Online (Sandbox Code Playgroud)
4.在test.sh中输入两行
ls
add 5 6
:w !bash
a1.sh test.py
bash: line 2: add: command not found
shell returned 127
Run Code Online (Sandbox Code Playgroud)
:execute '! source ~/.bashrc; source '.expand('%:p')可以发出两个命令:ls并add运行.
重启后,
1.add函数无法调用 …
我使用了"alias ruby = ruby1.9.1",所以我可以用这个来执行我的ruby:
红宝石123.rb
要么
ruby1.9.1 123.rb
但在我的vim中,我使用:!ruby和get/bin/bash:ruby:命令未找到.
我必须使用:!ruby1.9.1
别名如何工作?为什么vim不知道呢?
可能重复:
从vim执行的命令无法识别bash命令别名
我的〜/ .bashrc文件中有以下函数(在我的Ubunut框中)
# convert tex to pdf, no bib
function t2p {
latex $1 && latex $1 && dvips $1 -o $1.ps && ps2pdf $1.ps && rm -f $1.dvi }
# convert tex to pdf, with bib
function tb2p {
latex $1 && bibtex $1 && latex $1 && latex $1 && dvips $1 -o $1.ps && ps2pdf $1.ps && rm -f $1.dvi }
Run Code Online (Sandbox Code Playgroud)
例如,要将tex文件f.tex转换为pdf文件并以正确的顺序bibtex,我调用tb2p f.如果我在Bash终端,这非常有效.但是,要从Vim内部进入Bash提示符,我实际上必须执行命令:sh first.
为了简化上述过程,我尝试通过以下方式在Vim中执行函数 …
可能重复:
从vim执行的命令无法识别bash命令别名
我创建了一个名为"cache"的别名:alias cache ="[shell command]"
使用vim,我想通过':'来称呼这个别名 指令,但我可以调用像'date'这样的"标准"命令等等?
怎么可能让vim使用我的shell别名?
说我alias kapow='grep'
在我的.bashrc中设置
,我之后来源.
我打开vim,键入
:!kapow "dude"
但是当我真的希望它运行我的别名时,vim会尝试运行/ bin/bash kapow.
如何从vim内部的bashrc运行命令(不留下:shell)?