Vim 편집기의 상태 표시줄에 새 파일의 권한을 표시하는 방법은 무엇입니까?

Vim 편집기의 상태 표시줄에 새 파일의 권한을 표시하는 방법은 무엇입니까?

다음 코드를 사용하면 기존 파일에 대한 권한을 얻을 수 있습니다.

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""elsexorumask0777rwxrwxrwx

소유자( 0), 그룹( 1) 및 다른 모든 사람의 권한( )에 대해 설정( )의 각 읽기( ), 쓰기( ) 및 실행( ) 비트를 2확인하는 것을 반복( )합니다 . 해당 비트가 설정된 경우 ( ) 및 가 각각 변수에 추가됩니다. else를 추가하면 해당 작업이 허용되지 않음을 나타냅니다.for421and.="r""w""x"c"-"

관련 정보