다음 코드를 사용하면 기존 파일에 대한 권한을 얻을 수 있습니다.
augroup Get_file_perm
autocmd!
autocmd BufWinEnter,FileChangedShell * let w:file_perm=getfperm(expand('%:p'))
augroup END
" Output, e.g.: rw-rw-r--
set statusline=%{w:file_perm}
불행하게도 이 getfperm
함수는 현재 파일 경로( )가 존재하지 않는 경우 빈 문자열( )을 반환합니다. 나는 기대하고 있었다.""
'%:p'
umask
답변1
내가 아는 한, 당신이 요청한 것을 수행하는 Vim 기능은 없습니다. 하지만 나는 그 결과를 변수 s:Get_file_perm
에 할당하는 함수를 생각해 냈습니다 .w:file_perm
" ...
let w:file_perm=<sid>Get_file_perm()
" ...
function! s:Get_file_perm()
let a=getfperm(expand('%:p'))
if strlen(a)
return a
else
let b=printf("%o", xor(0777,system("umask")))
let c=""
for d in [0, 1, 2]
let c.=and(b[d], 4) ? "r" : "-"
let c.=and(b[d], 2) ? "w" : "-"
let c.=and(b[d], 1) ? "x" : "-"
endfor
return c
endif
endfunction
if
이 기능은 현재 파일 경로( )에 대한 권한( )이 존재하는지( ) 확인합니다 . 새 파일( )의 경우 -block 비트 단위는 8진수 리터럴( )에서 8진수를 뺍니다( ). 모든 권한 비트가 설정됩니다.getfperm
'%:p'
strlen
""
else
xor
umask
0777
rwxrwxrwx
소유자( 0
), 그룹( 1
) 및 다른 모든 사람의 권한( )에 대해 설정( )의 각 읽기( ), 쓰기( ) 및 실행( ) 비트를 2
확인하는 것을 반복( )합니다 . 해당 비트가 설정된 경우 ( ) 및 가 각각 변수에 추가됩니다. else를 추가하면 해당 작업이 허용되지 않음을 나타냅니다.for
4
2
1
and
.=
"r"
"w"
"x"
c
"-"