如何从vi中更改文件权限

时间:2009-10-22 11:41:01

标签: vim vi

我有时在vi中打开一个只读文件,忘记在打开它之前执行chmod +w。有没有办法从vi中更改文件?

!r chmod +w [filename]

之类的东西

是否有快捷方式引用当前打开的文件而不拼写它的长名称?

7 个答案:

答案 0 :(得分:52)

只需使用

:!chmod +w %

在命令模式下。 %将被当前文件名替换。

答案 1 :(得分:35)

如果您有权写入该文件,那么您可以使用感叹号来强制它:

:w!

如果您没有权利并且需要更改用户,但仍想写入文件,有时您可能会选择

:w !sudo tee %

答案 2 :(得分:8)

我知道这是一个旧帖子,但是使用Vim Version8时,您可以使用一个函数来更改文件权限。

根据version8.txt文件:

  

setfperm()设置文件的权限

然后可以通过"调用"来调用此函数。命令在Vim。

这样做如下:

:call setfperm("file name","permissions")

"权限的结构" string采用与Vim文档中描述的相同的形式:

  

getfperm({fname}) getfperm()           结果是一个String,它是读,写和执行           给定文件{fname}的权限。           如果{fname}不存在或其目录无法读取,则           返回空字符串。           结果是" rwxrwxrwx"形式,其中每组都是           " RWX" flags又代表所有者的权限           的文件,文件所属的组以及其他用户。           如果用户没有给定的权限,则为此标志           被替换为字符串" - "。例:               :echo getfperm(" / etc / passwd")           希望(从安全的角度来看)显示           字符串" rw-r - r - "甚至" rw -------"。

一个最小的例子:

:call setfperm("foo.txt","rwxrwxrwx")

这为" foo.txt"添加了读,写和执行权限。文件在当前目录中。

答案 3 :(得分:6)

你试过吗

!chmod +w %

%表示当前文件名。

您也可以将键映射到此键,如Ctrl-W。

:map <C-w> :!chmod +w %<CR>

请注意,您键入Ctrl-V Ctrl-M以获取<CR>

答案 4 :(得分:2)

使用vim编辑文件后,按&#34; esc&#34;然后&#34;:&#34;。 然后键入以下命令:

w !sudo tee %

然后按&#34;输入&#34;。 然后输入

:q!

成功退出编辑器。

答案 5 :(得分:1)

:!chmod <perms> <file>

如果vi仍然不想写它,

:se cpo-=W

答案 6 :(得分:0)

正如David指出的那样,setfperm()是在vim中执行此操作的方式。

以下是我用来向当前文件添加写入或执行权限的映射:

function! ChmodPlus(expr, pat)
    let file = expand('%')
    let oldperms = getfperm(file)
    let newperms = substitute(oldperms, a:expr, a:pat, '')
    if (oldperms != newperms)
        call setfperm(file, newperms)
    endif
    echom(printf('Permissions: %s', newperms))
endfunction

function! ChmodPlusX()
    call ChmodPlus('^\(..\).', '\1x')
endfunction

function! ChmodPlusW()
    call ChmodPlus('^\(.\).', '\1w')
endfunction

" Make current file writeable
noremap <silent> <Leader>W :call ChmodPlusW()<CR>

" Make current file executable
noremap <silent> <Leader>X :call ChmodPlusX()<CR>