Jer*_*lim 13 linux vim command-line
我正在从使用Gvim过渡到控制台Vim.
我在Vim中打开一个文件,然后挂起Vim,在命令行上运行一些命令然后想要返回到Vim.
Ctrl+Z (在正常模式下)暂停Vim并退回到控制台fg 可用于将焦点返回到Vim jobs列出后台作业,可用于获取作业号以将给定作业带到前台(例如,fg %2将作业2带到前台).但是,当Vim在后台并且我发出时vim file,该文件将在Vim的新实例中打开.
我习惯使用--remoteGvim选项在现有的Gvim实例中打开一个文件.
我刚读了@jamessan的这个答案,提供了一些想法.他显示了以下代码段:
vim --servername foo somefile.txt
:shell
<do stuff in your shell>
vim --servername foo --remote otherfile.txt
fg
Run Code Online (Sandbox Code Playgroud)
但是,我必须考虑如何使用一些别名更容易使用它.
这也是我需要的.我发现这个帖子虽然没有令人满意的方法,但很高兴看到人们和我一样有同样的要求.
我的方法是
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
}
Run Code Online (Sandbox Code Playgroud)
nnoremap <silent> <space>e :source $HOME/.vim_swap/e.vim<Bar>:call writefile([], $HOME."/.vim_swap/e.vim")<CR>
Run Code Online (Sandbox Code Playgroud)
然后v foo.c打开第一个文件,编辑...,ctrl-z暂停vim,做shell的东西,v bar.h带上vim前景.
在VIM中,按<Space>eTabedit bar.h.
所以我们的想法是从shell命令生成vim命令,将它们保存到temp .vim文件中.在VIM中,映射键以获取.vim文件并清除它.
您不需要再次运行 vim,而是需要将当前的 vim 进程带到前台(使用 fg)并在 vim 中打开文件。
我用得不多,但您可能会发现“vim 服务器”功能(请参阅 --remote*、--servername 等选项)可让您从 shell 将文件打开到现有的后台 vim 中。但是,ctrl-z会挂起该进程,而不是让它继续在后台运行,并且您需要将该 vim 放入后台,以便它可以作为“vim 服务器”进行响应。使用 shell 的 bg 命令来执行此操作。