我有一个包含 4 个文件夹路径的数组 $somePaths
。我想在 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
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
}
tpope/vim-obsession
开始记录新会话,下次打开vim时将加载它。会话名称只是您启动vim所在目录的名称。但如果您传递任何参数给vim,则它会像您预期的那样运行,而不必担心会话。tpope/vim-obsession
会保持其更新。