在VIM中的不同拆分窗口中打开文件

时间:2014-03-28 15:00:56

标签: vim editor vi

我有一些$somePaths数组的4个文件夹。我想在VIM中打开这个文件夹中的一些文件。以下内容在选项卡中打开它们。

vim -p `for i in ${somePaths[@];}; do echo $i/src/main.cpp; done`

实际上,我希望将这些文件放在拆分窗口中(十字形)。怎么做?

4 个答案:

答案 0 :(得分:6)

-p外,Vim还为水平/垂直分割提供-o-O命令行参数。不幸的是,他们不能混在一起。要构建自己的自定义窗口布局,必须通过-c传递显式窗口放置命令。这个例子

 $ vim 1 -c 'bel vsplit 2' -c '1wincmd w' -c 'bel split 3' -c '3wincmd w' -c 'bel split 4'

创建一个如下所示的布局:

+-----------+-----------+
|           |           |
|           |           |
|           |           |
|1          |2          |
+-----------+-----------+
|           |           |
|           |           |
|           |           |
|3          |4          |
+-----------+-----------+

要继续将文件列表作为一个块传递,您可以使用缓冲区编号单调增加的事实,并在命令中引用缓冲区编号:

$ vim -c 'bel vert sbuf 2' -c '1wincmd w' -c 'bel sbuf 3' -c '3wincmd w' -c 'bel sbuf 4' a b c d

答案 1 :(得分:4)

vim有:vertical命令,这对你的情况很有用。尝试一下:

vim +'vertical all' [your file list]

答案 2 :(得分:3)

您可以尝试使用-O4代替-p

答案 3 :(得分:2)

上面公布的公认解决方案很好并且解决了您的使用案例,但是我想指出一种替代方法来实现类似的东西而不需要太多努力或配置。

VIM内置了对记录会话:h :mksession的支持,允许你做的是保存当前的vim会话(打开文件,分割,标签,窗口等,具体取决于{{1}的值虽然记录和维护会话可能有点单调乏味,但我建议使用:h 'sessionoptions'(我之前使用过它)或xolox/vim-session(现在使用它)。这样你就可以了完全按照你离开的时间重新打开一个会话!

这是我的工作,我在〜/ .zshrc中有这个片段:

tpope/vim-obsession

基本上做的是检查vim是否在没有任何参数的情况下启动,并检查会话是否已经存在&加载它,或者使用function vim() { tmux rename-window "vim - ${PWD##*/}" if test $# -gt 0; then env vim --servername ${PWD##*/} "$@" elif test -f ~/.vim/sessions/${PWD##*/}.vim; then env vim --servername ${PWD##*/} -S ~/.vim/sessions/${PWD##*/}.vim else env vim --servername ${PWD##*/} -c Obsession\ ~/.vim/sessions/${PWD##*/}.vim fi } 开始录制新会话,该会话将在您下次打开vim时加载。会话名称只是你在vim中启动的目录的名称。如果你确实将任何参数传递给vim,那么它的行为就像你期望的那样,并且不用担心会话。

这样,我现在可以在任何目录中启动vim,第一次执行此操作时,它将开始记录新会话,而在后续调用中,它将加载该会话并tpope/vim-obsession保持更新。 / p>