Linux环境下VI/VIM编辑文件时无权限保存怎么办

  介绍

这篇文章主要为大家展示了“Linux环境下VI/VIM编辑文件时无权限保存怎么办”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Linux环境下VI/VIM编辑文件时无权限保存怎么办”这篇文章吧。

在Linux环境下,如果直接使用VI/VIM命令编辑没有修改权限的文件时,保存的时候就会提示用户无法进行保存操作,一般的解决方法只能是关闭文件重新以sudo权限打开该文件编辑后再保存(前提是用户具有sudo权限)。其实,在VI/VIM模式下通过一些简单的命令,就能在不关闭当前文件的情况下达到保存文件的目的。

方法一

关于% !sudo三通%比;/dev/null这条命令的说明如下

此命令是把当前文件(即%)作为stdin传给sudo三通命令来执行。

方法二
,

在Linux上工作的朋友很可能遇到过这样一种情况,当你用Vim编辑完一个文件时,运行:wq保存退出,突然蹦出一个错误:

E45: & # 39;只读的# 39;选项设置(添加!覆盖)

这表明文件是只读的,按照提示,加上!强制保存::w !,结果又一个错误出现:

“readonly-file-name"E212:所中断停下来# 39;t打开文件编写

文件明明存在,为何提示无法打开?这错误又代表什么呢?查看文档:帮助E212:所中断

出于某种原因,您正在编写的文件不能被创造或覆盖。
的原因可能是,你没有写权限的目录
或文件名无效。

原来是可能没有权限造成的。此时你才想起,这个文件需要根权限才能编辑,而当前登陆的只是普通用户,在编辑之前你忘了使用sudo来启动Vim,所以才保存失败。于是为了防止修改丢失,你只好先把它保存为另外一个临时文件temp-file-name,然后退出Vim,再运行sudo mv temp-file-name readonly-file-name覆盖原文件。

但这样操作过于繁琐。而且如果只是想暂存此文件,还需要接着修改,则希望保留Vim的工作状态,比如编辑历史,缓冲状态等等,该怎么办?能不能在不退出Vim的情况下获得根权限来保存这个文件?

<强>解决方案

答案是可以,执行这样一条命令即可:

: w ! sudo三通%

接下来我们来分析这个命令为什么可以工作,首先查看文档:帮助:w,向下滚动一点可以看到:

 

把这个使用方法对应前面的命令,如下所示:

:,,,,,,,w ,,,,,,,,,,,,,, ! sudo  tee  %   |,,,,,,,|,,,,,,,,,,,,,,,|,|   (范围):w(仪式),(+ +选择),! {cmd}

我们并未指定<代码> ,参见帮助文档最下面一行,当范围<代码> 未指定时,默认情况下是整个文件。此外,这里也没有指定选择。

<强> Vim中执行外部命令

接下来是一个叹号!,它表示其后面部分是外部命令,即<代码> sudo三通%> :! {cmd} 是一样的效果。后者的作用是打开壳执行一个命令,比如,运行<代码>:!ls>

<代码>:r ! pwd或:r ! ls

此时所有的内容便被读入至Vim,而不需要退出Vim,执行命令,然后拷贝粘贴至Vim中。有了它,Vim可以自由的操作外壳而无需退出。

<>强命令的另一种表示形式

再看前面的文档:

执行{cmd}(范围)线为标准输入

所以实际上这个:w并未真的保存当前文件,就像执行:w新文件名时,它将当前文件的内容保存到另外一个新文件名的文件中,在这里它相当于一个另存为,而不是保存。它将当前文档的内容写到后面cmd的标准输入中,再来执行cmd,所以整个命令可以转换为一个具有相同功能的普通壳命令:

猫readonly-file-name美元| sudo三通%

这样看起来“正常”些了。其中sudo很好理解,意为切换至根执行后面的命令,三通和%是什么呢?

Linux环境下VI/VIM编辑文件时无权限保存怎么办