在Vim中执行Bash函数-我如何才能做到?
可能重复:在Vim中执行Bash函数-我如何才能做到?,bash,vim,Bash,Vim,可能重复: 在我的~/.bashrc文件中(在我的Ubunut框中)有以下函数 例如,要将tex文件f.tex转换为pdf文件并按正确的顺序对其进行bibtex,我调用tb2p f。如果我在Bash终端中,这会非常有效。然而,要从Vim中获得Bash提示符,我实际上必须首先执行命令:sh 为了简化上述过程,我尝试通过在Vim内部执行函数t2p和tb2p:!t2p f。Vim然后告诉我它找不到函数t2p。我在谷歌上搜索了一下,读到我应该把这些函数放到文件/etc/bash.bashrc中,使它们
在我的~/.bashrc文件中(在我的Ubunut框中)有以下函数 例如,要将tex文件f.tex转换为pdf文件并按正确的顺序对其进行bibtex,我调用tb2p f。如果我在Bash终端中,这会非常有效。然而,要从Vim中获得Bash提示符,我实际上必须首先执行命令:sh 为了简化上述过程,我尝试通过在Vim内部执行函数t2p和tb2p:!t2p f。Vim然后告诉我它找不到函数t2p。我在谷歌上搜索了一下,读到我应该把这些函数放到文件/etc/bash.bashrc中,使它们对Vim可见。不幸的是,这在我的情况下不起作用。维姆仍然不知道这个函数 在一天结束时,我希望能够使用键盘快捷键从Vim中调用我的函数。因此,我的问题如下:
非常感谢。尝试使用
:!Vim中的bash-c t2p
。如果您的别名仅限于交互式shell,请添加-i
标志。尝试将set shell=bash\--login
添加到.vimrc
要转换当前文件,请键入:!tb2p%
,执行脚本时,%
将由Vim为您展开
一旦开始工作,您可以添加映射以使整个过程更快:
nnoremap <F12> :!tb2p %<CR>
nnoremap:!tb2p%
Vim
使用-c
参数运行bash
命令,这使得shell不交互和不登录,并且绕过了读取启动文件
您可以使用环境变量替代此设置
来自man bash:
或者,可以要求vim本身作为登录shell运行命令shell。从vim:help shell
中,我们得到以下信息:
On Unix the command normally runs in a non-interactive
shell. If you want an interactive shell to be used
(to use aliases) set 'shellcmdflag' to "-ic".
For Win32 also see |:!start|.
您始终可以在单独的文件中定义函数,并将该文件放在文件夹中 在PATH环境变量中。 在我的情况下,我将使用的个人功能转到~/bin 就t2p而言: 在~/bin中创建一个包含以下内容的t2p文件:
#!/bin/bash
# convert tex to pdf, no bib
latex $1 && latex $1 && dvips $1 -o $1.ps && ps2pdf $1.ps && rm -f $1.dvi
然后使文件可执行:
> chmod +x t2p
通过在~/.bashrc中放置以下内容,确保~/bin位于您的路径中:
export PATH=${HOME}/bin:${PATH}
这个答案解决了我的问题!我会在谷歌上搜索我的第二个问题。非常感谢!考虑安装
rubber
这是一个自动编译系统ruber-d main
将编译成PDFmain.tex
和所有依赖项,并自动检测书目或其他编译步骤的需要…请参阅:有趣的是,这个答案出现在我的谷歌搜索顶部。谢谢
> chmod +x t2p
export PATH=${HOME}/bin:${PATH}