使用vim查看目录文件内容

使用vim查看目录文件内容

据我了解,在Linux目录中大多数是普通文件,带有一些特殊处理(例如“rm”文件没问题;“rm”目录会抱怨w/o -r)。

当我执行以下 bash 命令时:

mkdir foo; touch foo/f1.txt; touch foo/f2.txt; vim foo

Vim 将 foo 目录文件的内容显示为:

" ============================================================================
" Netrw Directory Listing                                        (netrw v136)
"   /home/capdigi/foo
"   Sorted by      name
"   Sort sequence: [\/]$,\<core\%(\.\d\+\)\=\>,\.h$,\.c$,\.cpp$,*,\.o$,\.obj$,\.info$,\.swp$,\.bak$,\~$
"   Quick Help: <F1>:help  -:go up dir  D:delete  R:rename  s:sort-by  x:exec
" ============================================================================
../
f1.txt
f2.txt

我的问题是:

1) 为什么在这个例子的上下文中使用netrw? 根据http://www.vim.org/scripts/script.php?script_id=1075、netrw“支持跨网络读写文件”。这只是 vim 用于统一本地/网络目录访问的组件吗?

2)为什么需要netrw? 由于目录“大部分”是普通文件,难道它们不能作为普通文件打开而无需任何中间层吗?又名为什么所有的花哨?

答案1

在历史上Unix系统中,目录被实现为普通文件,并具有特殊模式表明它们是目录。在许多现代文件系统和操作系统上,情况已不再如此。当涉及到磁盘结构时,目录可能会也可能不会表示为类似文件的存储 blob,具体取决于文件系统。当涉及到操作系统接口时,有单独的系统调用来访问目录和常规文件:opendir,readdir,rewinddir,closedir对应于open,read,rewind,close分别。

读取目录的软件必须使用特定于目录的接口。当您在 Vim 中打开目录时,它不会像加载文件那样加载其内容。 Vim 对目录没有任何本机处理:如果您vim --noplugin在目录上运行,Vim 会抱怨"foo" is a directory并且不会出于同样的原因保存缓冲区。

netrw 的主要目标是访问远程文件(通过各种网络协议)。由于您无法轻松地在包含这些远程文件的目录中运行诸如ls和 之类的命令cp,因此 netrw 包含浏览目录并操作它们的代码 - 它既是文件管理器,又是远程文件浏览器。这些文件管理器功能在本地和远程都有意义,因此 netrw 将自身注册为本地目录以及远程文件和目录的处理程序。

答案2

无法访问原始目录数据。不允许写访问,因为这可能导致文件系统不一致。不提供读取访问权限,因为格式取决于文件系统。 (因此,最好强制执行某种程度的抽象)另请参阅:Unix 文件系统中的目录是如何实现的?

在unix上,vim将使用opendir, readdir,closedir接口(参见手册页)来一一读取目录条目,而无法访问原始数据。我想Netrw这只是这个接口的更高层次的抽象,它扩展到各种“非 UNIX”文件系统。

相关内容