如何在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 按位从八进制文字( ) 中减去 ( ) 八进制——所有权限位均已设置。getfperm'%:p'strlen""elsexorumask0777rwxrwxrwx

对于所有者 ( 0)、组 ( 1) 和其他人的权限 ( 2),它会迭代 ( ) 检查设置 ( )for的每个读 ( 4)、写 ( 2) 和执行 ( ) 位。如果设置了相应的位,则会分别将 ( )和附加到变量。附加else表示不允许相应的操作。1and.="r""w""x"c"-"

相关内容