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

我正在从使用Gvim转换到控制台Vim。

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

  • Ctrl+Z (在正常模式下)暂停Vim并退回到控制台
  • fg可以用来把焦点返回给Vim
  • jobs列出了后台工作,可以用来获得工作号码,以将工作带到前台(例如, fg %2将工作2带到前台)。

但是,当Vim处于后台并发出vim file ,文件会在Vim的一个新实例中打开。

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

题:

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

更新:

我刚刚阅读了@ jamessan提供的一些想法。 他显示了以下代码片段:

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

但是,我不得不考虑如何更容易地使用别名。

  • 这是一个好方法吗?
  • 怎么能有效使用?

这也是我所需要的。 我发现这个线程虽然没有令人满意的方法,但很高兴看到像我一样有相同需求的人。

我的方法是

在下面添加到.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键入bar.h。

所以这个想法是从shell命令生成vim命令,将它们保存到一个临时.vim文件。 在VIM中,映射键输入.vim文件并清除它。

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

我没有用太多,但你可能会发现“vim服务器”功能(请参阅–remote *, – 服务器名称等选项)可以让你从你的shell打开文件到一个现有的,后台vim。 但是,ctrl-z 挂起了这个进程,而不是让它继续在后台运行,你需要把这个vim放到后台才能作为“vim服务器”来响应。 使用shell的bg命令来做到这一点。

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

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