我希望能够在vim中编辑(使用:sh
),回到我的终端会话,cd到其他目录,然后打开另一个文件但是在之前的同一个vim会话中。即如果我在终端中“退出”,我想回到vim,:ls
显示两个缓冲区。
目前,如果我:sh
,vim newfile
,我会进入vim,但:ls
只显示新文件。
是否有办法将新文件添加到上一个会话而不是启动新文件?
(注意:我对vim术语不太熟悉。“session”我的意思是vim的实例,它有我以前的缓冲区。)
答案 0 :(得分:4)
您无需返回shell打开其他文件::edit
,:split
,:vsplit
,:tabedit
都允许您从任何地方编辑文件在你的磁盘上(和tab完成):
:sp ../../path/to/file
您可以使用wildmenu
,wildmode
和wildignorecase
选项来提高效果。
您还可以使用内置的Netrw插件,通过稍微更舒适的“图形”浏览器浏览文件系统(请参阅:help netrw
):
:Ex
:Tex /path/to/
此外,:shell
会打开一个 new shell,它很可能不会对您的初始Vim会话有太多了解,因此无法与之通话。
答案 1 :(得分:3)
当您使用:sh
进入子shell然后调用Vim时,这将是一个全新的实例。您可以做的是使用客户端 - 服务器通信启动原始Vim:
$ vim --servername main
不幸的是,当您使用:sh
进入子shell时,原始Vim将被暂停,您无法与之通信。你必须产生另一个shell,例如在另一个终端或屏幕拆分。如果您现在想要编辑原始Vim中的另一个文件,请使用Vim的客户端 - 服务器通信在那里打开它:
$ vim --servername main --remove newfile.txt
答案 2 :(得分:2)
你可以使用:tabedit filename
而不是gt
tp move move through tabs。
还 cntl + z 将vim放在后台,你可以照常使用你的shell。让vim回来。使用命令fg