Vim netrwプラグインは実際にディレクトリファイルの内容を表示しますか?

Vim netrwプラグインは実際にディレクトリファイルの内容を表示しますか?

netrwプラグインを使用すると、Vim人々はカタログファイルを見ることができます。ここでVim例を見てみましょうvim .

" ============================================================================
" Netrw Directory Listing                                        (netrw v155)
"   /root/vim/code/files
"   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:special
" ==============================================================================
../                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          
./
letters/
mvc/
.chapters
a.txt
b.txt
mvc_paths.vim

Vimディレクトリファイルの内容を実際に見ることができますか?たとえばcat .、、、less .などhexdump .はすべて. is a directoryエラーメッセージで失敗します。それともnetrwプラグインがディレクトリの内容だけを一覧表示し、実際のディレクトリファイルが開いているように見えますか?

答え1

ディレクトリの読み込みは実際にはファイルでは行われません。readdrシステムコールで発生します。以前の実装とラッパーをman 2 readdir純粋なシステムコールとして参照してください(以前の実装を使用しないでください)。man 3 readdir

しかし、Vimはnetrw同様のことをしません。lsワイルドカードを呼び出すか実行するだけで(1つを実行するタイミングとは異なるものを実行するタイミングを確認するには、以下を読んでください)、出力を解析します。

呼び出しnetrw方法を選択できる構成lsリモートシステム。次のようにSSHおよびFTP接続でリストコマンドを設定できますvimrc(デフォルト設定).

let g:netrw_list_cmd = 'ssh HOSTNAME ls -Fa'
let g:netrw_ftp_list_cmd = 'ls -lF'

ls(FTPなしのシステムとは異なる値に設定することもできますls。もちろん、FTPなしのシステムもあります。)

~のため地域リスト netrwワイルドカードを実行し、呼び出してgetftype()ファイルを装飾します(/ディレクトリ、@リンクなど)。autoload/netrw.vimプロセス中にs:LocalListing()以下を実行してください。

let dirname    = b:netrw_curdir
let dirnamelen = strlen(b:netrw_curdir)
let filelist   = s:NetrwGlob(dirname,"*",0)  " here is the globbing of `*`
let filelist   = filelist + s:NetrwGlob(dirname,".*",0)  " and here `.*`

次に、getftype()各ファイルを呼び出しますfilelist

要約すると、netrwVimはこのglob()機能を持っているので、Vimはglob呼び出し(man 3 glob)を順番に実行します。

関連情報