我有一些 $somePaths
4个文件夹的数组。我想在VIM中打开这个文件夹中的一些文件。以下内容在选项卡中打开它们。
vim -p `for i in ${somePaths[@];}; do echo $i/src/main.cpp; done`
实际上我想将这些文件放在拆分窗口(十字架)中。怎么做?
我有一些 $somePaths
4个文件夹的数组。我想在VIM中打开这个文件夹中的一些文件。以下内容在选项卡中打开它们。
vim -p `for i in ${somePaths[@];}; do echo $i/src/main.cpp; done`
实际上我想将这些文件放在拆分窗口(十字架)中。怎么做?
除了 -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
除了 -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
vim有 :vertical
命令,这可能对您的情况有用。尝试一下:
vim +'vertical all' [your file list]
你可以尝试使用 -O4
代替 -p
。
上面公布的公认解决方案很好并且解决了您的使用案例,但是我想指出另一种方法来实现类似的东西而不需要太多努力或配置。
VIM内置了对记录会话的支持, :h :mksession
,允许你做的是保存当前的vim会话(打开文件,分割,标签,窗口等,取决于值 :h 'sessionoptions'
。虽然记录和维护会话可能有点乏味,但我建议使用的任何一个 xolox/vim-session
(我以前用过它)或者 tpope/vim-obsession
(现在使用它)。这将允许您完全按照中断的方式重新打开会话!
这是我做的,我在〜/ .zshrc中有这个片段:
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是否在没有任何参数的情况下启动,并检查会话是否已经存在并加载它,或者使用 tpope/vim-obsession
开始录制一个新会话,将在下次打开vim时加载。会话名称只是您在vim中启动的目录的名称。如果您确实将任何参数传递给vim,但它会表现得像您期望的那样,并且不会担心会话。
这样,我现在可以在任何目录中启动vim,并且在我第一次这样做时,它将开始记录新会话,而在后续调用中,它将加载该会话并且 tpope/vim-obsession
保持更新。