我正在从使用Gvim过渡到控制台Vim。
我在Vim中打开一个文件,然后暂停Vim,在命令行上运行一些命令,然后想要返回Vim。
Ctrl+Z
(在正常模式下)暂停Vim并退回到控制台fg
可用于将焦点返回给Vim jobs
列出后台作业,可用于获取作业号
将一个给定的工作带到前台(例如,fg %2
将工作2带到前台
前景)。但是,当Vim在后台并发出vim file
时,该文件将在Vim的新实例中打开。
我习惯使用Gvim的--remote
选项在现有的Gvim实例中打开文件。
我刚读了this answer by @jamessan,提供了一些想法。他展示了以下代码片段:
vim --servername foo somefile.txt
:shell
<do stuff in your shell>
vim --servername foo --remote otherfile.txt
fg
但是,我必须考虑如何使用一些别名更容易使用。
答案 0 :(得分:6)
这也是我的需要。我发现这个帖子虽然没有令人满意的方法,但很高兴看到人们和我一样有这样的要求。
我的方法是
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
}
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版本,因为我在那里执行大部分命令(编译启动等)。