我正在从使用Gvim转换到控制台Vim。
我在Vim中打开一个文件,然后暂停Vim,在命令行上运行一些命令,然后返回到Vim。
Ctrl+Z
(在正常模式下)暂停Vim并退回到控制台 fg
可以用来把焦点返回给Vim jobs
列出了后台工作,可以用来获得工作号码,以将工作带到前台(例如, fg %2
将工作2带到前台)。 但是,当Vim处于后台并发出vim file
,文件会在Vim的一个新实例中打开。
我习惯使用--remote
选项在现有的Gvim实例中打开一个文件。
我刚刚阅读了@ jamessan提供的一些想法。 他显示了以下代码片段:
vim --servername foo somefile.txt :shell <do stuff in your shell> vim --servername foo --remote otherfile.txt fg
但是,我不得不考虑如何更容易地使用别名。
这也是我所需要的。 我发现这个线程虽然没有令人满意的方法,但很高兴看到像我一样有相同需求的人。
我的方法是
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
键入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版本,因为我在那里执行大部分命令(编译启动等)。