Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Vim中执行Bash函数-我如何才能做到?_Bash_Vim - Fatal编程技术网

在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内部执行函数t2ptb2p:!t2p f。Vim然后告诉我它找不到函数t2p。我在谷歌上搜索了一下,读到我应该把这些函数放到文件/etc/bash.bashrc中,使它们对Vim可见。不幸的是,这在我的情况下不起作用。维姆仍然不知道这个函数

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

  • 如何让Vim知道~/.bashrc函数
  • 如何在~/.vimrc中为~/.bashrc中的函数设置键盘快捷键

  • 非常感谢。

    尝试使用
    :!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
    将编译成PDF
    main.tex
    和所有依赖项,并自动检测书目或其他编译步骤的需要…请参阅:有趣的是,这个答案出现在我的谷歌搜索顶部。谢谢
    > chmod +x t2p
    
    export PATH=${HOME}/bin:${PATH}