如何从Bash命令行在后台Vim中打开另一个文件?

时间:2011-05-14 04:37:32

标签: linux vim command-line

我正在从使用Gvim过渡到控制台Vim。

我在Vim中打开一个文件,然后暂停Vim,在命令行上运行一些命令,然后想要返回Vim。

  • Ctrl+Z(在正常模式下)暂停Vim并退回到控制台
  • fg可用于将焦点返回给Vim
  • jobs列出后台作业,可用于获取作业号   将一个给定的工作带到前台(例如,fg %2将工作2带到前台   前景)。

但是,当Vim在后台并发出vim file时,该文件将在Vim的新实例中打开。

我习惯使用Gvim的--remote选项在现有的Gvim实例中打开文件。

问题:

  • 如何从命令行在后台Vim中打开另一个文件?
  • 这是在控制台和Vim之间移动的合理工作流程吗?

更新

我刚读了this answer by @jamessan,提供了一些想法。他展示了以下代码片段:

vim --servername foo somefile.txt
:shell
<do stuff in your shell>
vim --servername foo --remote otherfile.txt
fg

但是,我必须考虑如何使用一些别名更容易使用。

  • 这会是一个好方法吗?
  • 如何才能提高效率?

3 个答案:

答案 0 :(得分:6)

这也是我的需要。我发现这个帖子虽然没有令人满意的方法,但很高兴看到人们和我一样有这样的要求。

我的方法是

将以下内容添加到.bashrc

v() {
    vim_id=`jobs|sed -n "/vim/s/\[\([0-9]\)\]+.*/\1/p"`
    if [ -n "$vim_id" ]; then
        echo "tabedit $@" > ~/.vim_swap/e.vim && fg $vim_id
    else
        vim $@
    fi
}

将以下内容添加到.vimrc

nnoremap <silent> <space>e :source $HOME/.vim_swap/e.vim<Bar>:call writefile([], $HOME."/.vim_swap/e.vim")<CR>

然后v foo.c打开第一个文件,编辑...,ctrl-z暂停vim,执行shell东西,v bar.h带来vim前景。

在VIM中,按<Space>e到tabedit bar.h。

所以我们的想法是从shell命令生成vim命令,将它们保存到temp .vim文件中。在VIM中,映射键以获取.vim文件并清除它。

答案 1 :(得分:3)

不是再次运行vim,而是需要将当前的vim进程带到前台(使用fg)并在vim中打开文件。

我没有太多使用它,但您可能会发现“vim服务器”功能(请参阅--remote *, - servername等选项)允许您将shell中的文件打开到现有的背景vim中。但是,ctrl-z 暂停进程而不是允许它继续在后台运行,并且您需要将该vim放入后台,以便它可以作为“vim服务器”进行响应。使用shell的bg命令来做到这一点。

答案 2 :(得分:2)

我只是从fg调用vim并在vim中打开新文件,因为它似乎更快(虽然它对我来说可能更快)。要使用vim中的多个文件,您需要使用命令编辑(在vim中)::e [filepath/]filename并使用^I(ctrl + I)和{^O并使用{{1}}和{{1}}来执行真正的缓冲区(所有文件将作为vim缓冲区) {1}}(ctrl + o)

它适用于GTK和shell版本。工作流程没有这么大的差异。我喜欢shell版本,因为我在那里执行大部分命令(编译启动等)。