Vim --remote-silent 始终为第一个文件打开 [No Name] 缓冲区

7
我希望能够使用相同的实例打开文件,因此在打开文件时添加了--remote-silent。但第一次加载时,Vim将打开一个空缓冲区,然后是我的文件。所以现在我有两个缓冲区。
经过进一步调查,我发现设置nohidden可以解决这个问题。但是,不仅违背了我的喜好,而且会导致第一个缓冲区没有语法高亮。
没有--remote-silent选项时就不会出现这种情况。
谢谢您的帮助!
2个回答

3
执行$ vim --servername FOO --remote[-silent] filename命令时,如果没有运行实例,则会先启动一个新的实例再打开文件。这与$vim filename不同,您需要找到一种方法来完全删除第一个空缓冲区。
经过有限的测试,将set bufhidden=wipe添加到您的~/.vimrc文件中可能会解决该问题。由于set bufhidden=wipe仅对第一个空缓冲区有效,并在之后重置,因此它是局部于缓冲区的。
请参阅:h bufhidden
然而,这样做肯定会引起在正常情况下运行Vim时出现一些问题。
编辑:
是的,set bufhidden=wipe会导致显然的问题。 当以正常方式启动(使用$vim file1)时,当您编辑第二个文件时,第一个缓冲区将被清除,这不是您想要的结果。
检查缓冲区名称即可解决该问题:
if bufname('%') == ''
  set bufhidden=wipe
endif

代码高亮在这里的任何情况下都可以工作。你能否将~/.vim/~/.vimrc的内容发布到某个地方?

成功删除了缓冲区,但第一个文件没有语法高亮。我也无法打开它。 - Dalton Tan
文件已在此处进行了句法突出显示。不过,bufhidden 似乎不是有效的解决方案,因为当使用 $ vim file1 启动后执行 :e file2 时,它将抹掉 file1。我认为最好使用“autocmd”来解决。 - romainl
我的vimrc配置文件 http://paste2.org/p/2203811,查看第57行可以了解我是如何解决问题的。不确定这是否是正确的方法,但目前似乎可以工作。 - Dalton Tan
@Dalton Tan,如果您想要打开一个目录该怎么办呢?例如gvim --remote .,目的是让用户选择并打开一个文件。我使用NerdTree,但很遗憾您的方法会清除NerdTree。唉。 - Lqueryvg

2
--remote系列选项允许在打开文件后执行额外的Ex命令。
您可以在此处添加:bd1,该命令将删除#1缓冲区,即[No Name]缓冲区。
例如:--remote-silent +:bd1 {file}

1
太棒了:需要成为被接受的答案。解决了一个关于Vim作为Claws Mail外部编辑器的问题(通过xfce4-terminal --disable-server --geometry=230x60+60+0 -x vim -f --remote-silent +:bd1 "$@"调用bash脚本,通过/mnt/Vancouver/programming/scripts/claws_mail-external_editor.sh %s设置为Claws Mail的外部文本编辑器命令)。解决的问题与OP的问题相同,即在存在打开缓冲区的情况下,需要为CM消息组合打开新的Vim实例。 - Victoria Stuart

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接