如何在vim中的文件列表中打开文件?

dim*_*mus 32 vim

我在vim中打开了一个很长的文件列表,如下所示:

/dir1/file1
/dir2/file2
/dir2/file3
.....
Run Code Online (Sandbox Code Playgroud)

如何通过拆分或编辑在同一个vim会话中以最简单的方式逐个打开所有这些?

Ron*_*del 59

我会用-p表示标签

vim -p `cat yourlistoffiles`
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果要在不使用vim选项卡的情况下在单独的缓冲区中打开文件,可以删除`-p`标志. (6认同)
  • 此外,如果对标签使用`-p`,则将打开的标签数量将限制为`tabpagemax`(默认为10).如果要将其更改为100(例如),可以将`set tabpagemax = 100`添加到vimrc或将其设置为其他位置. (3认同)

Has*_*kun 17

您可以使用quickfix模式,如下所示

:set errorformat=%f
:cf myfilelist
Run Code Online (Sandbox Code Playgroud)

此时,您可以使用普通的quickfix快捷方式浏览文件,:cn下一个文件,:cp上一个文件,:cr再次转到第一个文件.

编辑:

哦,如果你想从当前缓冲区中读取列表,请使用上面的说明中的in :cb而不是:cfin


sea*_*ges 8

我假设您在Vim中打开了文件列表,并希望在整个列表中模拟"gf"命令...

编辑.vimrc以包含此功能:

function Openall()
    edit <cfile>
    bfirst
endfunction
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用可视模式(1G,Shift-V,G)并键入":call Openall()"突出显示整个文件(或您要打开的路径集).然后命令行将显示:

:'<,'>call Openall()
Run Code Online (Sandbox Code Playgroud)

这将在所有突出显示的行中运行新的Openall()函数.

按Enter键,所有文件将在后台缓冲区中打开.然后,您可以使用常用的缓冲区命令访问它们.:ls会将它们显示为列表.


twh*_*ney 7

对于我的用例,您已经打开了一个包含文件列表的缓冲区,我找到了执行此操作的最佳方法。你可以在 vim cmd 模式下输入:

:% normal gf<C-v><C-o>
Run Code Online (Sandbox Code Playgroud)

<C-v>你在哪里输入 Ctrl 和 v,与 相同<C-o>

它变成:

:% normal gf^O
Run Code Online (Sandbox Code Playgroud)

这是如何运作的:

  • %对文件中的每一行运行命令
  • normal在正常模式下运行其后的所有内容
  • gf在新缓冲区中打开光标下的文件
  • <C-v>让您输入控制代码(<C-o>在本例中)
  • <C-o>返回到最后一个位置,该位置始终是带有文件列表的缓冲区

潜在用途:

# open buffer with list of files from grep
$ grep -rl "new User()" mycode/ libraries/ | vim -

# then runs this in vim:
:% normal gf^O
Run Code Online (Sandbox Code Playgroud)

奖励:创建键盘快捷键

将以下内容添加到您的~/.vimrc

" Open all files in current buffer (e.g. after piping to `vim -`)
nnoremap <leader>oa :% normal gf^O<cr>
Run Code Online (Sandbox Code Playgroud)

这映射\oa到运行命令(因为<leader>\我来说)。

使用宏的替代方法:

qogf<C-o>j
Run Code Online (Sandbox Code Playgroud)

运行gf(go file) 然后使用<C-o>返回到初始的未命名缓冲区,然后只用 向下一行j,准备重复。

然后查看缓冲区中有多少行 (12) 并运行宏,如下所示:

12@o
Run Code Online (Sandbox Code Playgroud)


ng.*_*ng. 6

您可以执行以下操作

cat file | xargs vim
Run Code Online (Sandbox Code Playgroud)

如果“文件”包含您的文件列表,则将在同一vim会话中打开文件。和往常一样,当打开多个缓冲区时,可以使用:bn向前导航和:bp反向导航。

  • @ng,您根本不了解xargs。如果传递“成千上万个文件”,它将为前20个发出vim命令,然后为后20个发出另一个vim命令,依此类推。 (8认同)