在Vim中执行Bash功能 - 我该怎么做?

时间:2011-05-28 16:11:03

标签: bash vim

  

可能重复:
  Commands executed from vim are not recognizing bash command aliases

我的〜/ .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 }

例如,要将tex文件 f.tex 转换为pdf文件并按正确的顺序bibtex,我调用 tb2p f 。如果我在Bash终端,这非常有效。但是,要从Vim内部进入Bash提示符,我实际上必须首先执行命令:sh

为了简化上述步骤,我尝试通过:!t2p f 在Vim中执行 t2p tb2p 功能。然后Vim告诉我它找不到函数 t2p 。我做了一些谷歌搜索,并读到我应该将这些函数放入文件 /etc/bash.bashrc ,以使它们对Vim可见。不幸的是,这在我的情况下不起作用。 Vim仍然不知道这个功能。

在一天结束时,我希望能够使用键盘快捷键从Vim中调用我的功能。因此,我的问题如下:

  1. 我怎样才能让Vim知道〜/ .bashrc 的功能?
  2. 如何为〜/ .bashrc 中的功能〜/ .vimrc 设置键盘快捷键?
  3. 非常感谢你。

4 个答案:

答案 0 :(得分:4)

尝试在Vim中使用:!bash -c t2p。如果您的别名仅限于交互式shell,则还要添加-i标记。

答案 1 :(得分:1)

尝试将set shell=bash\ --login添加到.vimrc。

要转换当前文件,请键入:!tb2p %,执行脚本时,Vim会为您展开%

一旦它正常工作,您可以添加映射以使整个过程更快:

nnoremap <F12> :!tb2p %<CR>

答案 2 :(得分:1)

Vim使用bash参数运行-c命令,这使得shell非交互式和非登录,并绕过读取启动文件。

您可以使用环境变量覆盖它。

来自 man bash

   When  bash is started non-interactively, to run a shell script, for example, it looks for the variable BASH_ENV
   in the environment, expands its value if it appears there, and uses the expanded value as the name of a file to
   read and execute.  Bash behaves as if the following command were executed:
          if [ -n "$BASH_ENV" ]; then . "$BASH_ENV"; fi
   but the value of the PATH variable is not used to search for the file name.

或者,可以要求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|.

答案 3 :(得分:0)

您始终可以在单独的文件中定义功能,并将该文件放在文件夹中 在您的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

确保〜/ bin在您的路径中,将以下内容放在〜/ .bashrc中:

export PATH=${HOME}/bin:${PATH}