如何从vi中更改文件权限

veh*_*zzz 23 vi vim

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

有点像!r chmod +w [filename]

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

Dav*_*tte 54

只是用

:!chmod +w %
Run Code Online (Sandbox Code Playgroud)

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

  • 谢谢---这很有用.一个小麻烦是vim现在警告需要重新加载文件(W16).有没有办法在不设置自动回复的情况下阻止它? (3认同)

Mic*_*ker 35

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

:w!
Run Code Online (Sandbox Code Playgroud)

如果您没有权限并且需要更改用户,但仍希望写入文件,有时您可能会选择类似的内容

:w !sudo tee %
Run Code Online (Sandbox Code Playgroud)

  • 你也不想一直写文件;-) (3认同)

小智 10

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

根据version8.txt文件:

setfperm()设置文件的权限

然后可以通过Vim中的"call"命令调用此函数.

这样做如下:

:call setfperm("file name","permissions")
Run Code Online (Sandbox Code Playgroud)

"permissions"字符串的结构采用与Vim文档中描述的相同的形式:

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

一个最小的例子:

:call setfperm("foo.txt","rwxrwxrwx")
Run Code Online (Sandbox Code Playgroud)

这会为当前目录中的"foo.txt"文件添加读取,写入和执行权限.

  • 在Vim 7中也存在`setfperm()`(至少是7.4有)。`:call setfperm(expand(“%”),“ rwxr-xr-x”))是一种将当前文件的模式设置为0755的方法,而无需显式输入文件名。 (2认同)

Mic*_*lon 7

你有没有尝试过

!chmod +w %
Run Code Online (Sandbox Code Playgroud)

%表示当前文件名.

您也可以像Ctrl-W一样将键映射到此.

:map <C-w> :!chmod +w %<CR>
Run Code Online (Sandbox Code Playgroud)

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


小智 5

使用 vim 编辑文件后,按“esc”,然后按“:”。然后键入以下命令:

w !sudo tee %
Run Code Online (Sandbox Code Playgroud)

然后按“输入”。然后输入

:q!
Run Code Online (Sandbox Code Playgroud)

成功退出编辑器。