【问题标题】:Open files in different split windows in VIM在 VIM 的不同拆分窗口中打开文件
【发布时间】:2014-05-08 02:58:56
【问题描述】:

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

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

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

【问题讨论】:

    标签: vim editor vi


    【解决方案1】:

    除了-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
    

    【讨论】:

    • 谢谢。是否可以传递文件列表以使用此布局打开它?
    【解决方案2】:

    vim 有 :vertical 命令,在您的情况下可能很有用。试试这个:

    vim +'vertical all' [your file list]
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

      • 在水平拆分窗口时不是很灵活(拆分线是水平的,标签是垂直的),但对于开始并取决于您的屏幕尺寸是否合适。
      【解决方案4】:

      上面发布的公认解决方案很好,可以解决您的用例,但是我想指出一种无需太多努力或配置即可实现类似目标的替代方法。

      VIM 内置了对记录会话 :h :mksession 的支持,允许您保存当前的 vim 会话(打开文件、拆分、选项卡、窗口等,取决于 :h 'sessionoptions' 的值。虽然记录并且维护会话可能有点乏味,我建议使用xolox/vim-session(我以前使用过)或tpope/vim-obsession(现在使用它)。这将允许您重新打开会话完全一样你离开了!

      这就是我的工作,我的 ~/.zshrc 中有这个 sn-p:

      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 会保持更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-01-26
        • 1970-01-01
        • 1970-01-01
        • 2013-04-06
        • 2016-07-21
        • 2011-06-16
        • 2012-01-01
        • 1970-01-01
        相关资源
        最近更新 更多