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와일드카드를 호출하거나 실행하고(하나를 수행할 시기와 다른 것을 수행할 시기를 알아보려면 아래를 읽으십시오) 출력을 구문 분석합니다.

호출 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)을 차례로 수행합니다.

관련 정보