vim:vnew,但接受缓冲区而不是文件名?

时间:2011-05-25 20:48:29

标签: vim

目前,如果我想创建一个新窗口然后加载缓冲区,我使用:vnew :buf foo.py。是否有一个命令可以同时执行这两个操作?

2 个答案:

答案 0 :(得分:3)

是的,有一个命令:

:[N]sb[uffer] [N]                   :sb :sbuffer
        Split window and edit buffer [N] from the buffer list.  If [N]
        is not given, the current buffer is edited.  Respects the
        "useopen" setting of 'switchbuf' when splitting.  This will
        also edit a buffer that is not in the buffer list, without
        setting the 'buflisted' flag.

您可能会发现这些也很有用:

:[N]sbn[ext] [N]                                    :sbn :sbnext
        Split window and go to [N]th next buffer in buffer list.
        Wraps around the end of the buffer list.  Uses 'switchbuf'

:[N]sbN[ext] [N]            :sbN :sbNext :sbp :sbprevious
:[N]sbp[revious] [N]
        Split window and go to [N]th previous buffer in buffer list.
        Wraps around the start of the buffer list.
        Uses 'switchbuf'.

这两个命令的问题在于它们将水平分割。您可以在:vert[ical]之前加上它们,但这会打破您的一个命令范例: - )

无论如何,:vert sb foo.py并没有那么多的打字,如果你经常使用它,你可能会考虑为它创建一个地图。也许是这样的:

cnoremap ,sb vert sb 

答案 1 :(得分:1)

告诉:vnew文件的路径:

:vnew foo.py

编辑:

正如sidyll所说,没有内置命令可以垂直拆分窗口来编辑缓冲区,然后我创建了一个新的ex命令,可以执行你想要的操作:

command! -nargs=1 -complete=buffer -bang Vbuffer vnew | buf<bang> <args>

!之后的command会替换旧的:Vbuffer(如果它存在(您可以删除它,因为我已将其添加进行测试),-nargs=1表示新的:buf command接受1个参数,该参数使用<args>传递给-complete=buffer命令,-bang将在您为参数名称键入 tab 时建议缓冲区名称,并{{1表示新命令接受!选项,该选项也使用:buf传递给<bang>命令。

只需将该行添加到~/.vimrc并重新:source即可。 ; - )