使用Vim打开和保存文件是最常用的操作,介绍使用edit命令通过文件路径来打开文件,使用write命令保存文件,当文件路径不存在或用户权限不匹配时,使用write命令调用外部shell程序完成操作。

1. edit命令打开文件

Vim命令 :edit (缩写形式为 :e) 可以通过文件的绝对路径或相对路径来打开文件。

如果想打开的文件和当前活动文件缓冲区中的文件在同一个目录里,可以使用 :edit %:h<Tab>命令。

% 符号代表活动缓冲区的完整文件路径:h 修饰符会去除路径中的文件名,但保留路径中的其他部分。因此,输入的 %:h<Tab> 会被展开为当前文件所在目录的路径。

Vim命令 % 和 :h 在命令行模式下具有特殊含义,可用于高效操作与Vim文件路径相关的功能。

2. 把文件保存到不存在的目录

如果使用 :edit {file} 命令指定了一个不存在的文件路径,Vim 会创建一个新的空白缓冲区。在新建的空白缓冲区中按 <Ctrl-g> 时可以看到该缓冲区被标识为新文件。然后,当执行 :write (缩写形式为 :w) 命令保存该缓冲区时,Vim 会尝试将此缓冲区的内容写到创建该缓冲区时所指定的文件路径中。

如果指定的文件路径不存在时,Vim会因为找不到对应目录而显示出错信息 “无法打开并写入文件”。

此时,一个常用的Vim使用技巧是调用外部的 mkdir 程序新建目录。在Vim命令行模式下执行 :!mkdir -p %:h 命令后可以执行 :write 命令保存新建的文件。

:!mkdir 表示调用外部的 mkdir 命令,-p 参数使 mkdir 创建任何不存在的中间目录,而 %:h 表示当前活动缓冲区对应文件所在目录

<Ctrl-g> 命令用于显示当前文件的文件名及状态,

3. 以超级用户权限保存文件

在使用Vim工作时,有时会遇到需要以root身份保存文件的场景。

例如,假设当前用户为 vim,打开 /etc/hosts 文件查看当前host配置后需要新增一个域名解析 vim.ink 127.0.0.1

首先,使用 Go 命令在hosts文件末尾新建内容后,使用 :write 命令尝试保存结果,此时Vim会报错 “E45:已设定选项 ‘readonly’ (请加 ! 强制执行)”。按照提示,使用命令 :write! 强制执行write命令时,Vim仍然报错 “ E212: 无法打开并写入文件”。

这说明现在的问题是当前用户没有写 /etc/hosts 文件的权限。

为了不退出Vim而保留已有修改,可以使用Vim命令 :write !sudo tee % > /dev/null,然后按Vim的提示输入vim用户的密码并按 L 键重新将该文件加载到缓冲区即可。

这条命令是如何工作的?

首先,:write !{cmd} 命令会把当前文件缓冲区的内容作为标准输入传给指定的{cmd},{cmd} 可以是任何外部程序 (vim命令行模式下执行命令 :h :write_c 可查看更多内容)。

其次,在 Vim 命令行中,% 符号会展开成当前文件的完整路径,因此上面的命令可以展开为 :write !sudo tee /etc/hosts > /dev/null

所以,上面这条命令会把当前文件缓冲区的内容当作标准输入传递给linux的 tee 命令,以超级用户权限运行 tee 命令重定向到文件 /etc/hosts 中,从而实现了不重启Vim而以超级用户权限保存文件的需求。

:linux命令tee表示将内容重定向到指定的文件并重定向内容副本到标准输出。

[No0000192]Vim打开和保存文件-Vim使用技巧(7)的更多相关文章

  1. vim 打开多个文件

    一.如果在终端还没有打开vim 1.vim横向分屏打开多个文件 vim -o 文件1 文件2 2.vim纵向分屏打开多个文件 vim -O 文件1 文件2 二.如果在终端已经打开vim 1.横向分屏打 ...

  2. vim打开多个文件、同时显示多个文件、在文件之间切换

    打开多个文件: 1.vim还没有启动的时候: 在终端里输入  vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...

  3. silverlight打开和保存文件

    因为Silverlight是运行在浏览器中的客户端,所以对于程序的操作权限要求比较严格,以本篇的主题来说,一个表现就是不能够随意的进行文件打开和保存操作,如果在代码中直接使用Stream来操作文件,会 ...

  4. VIM之打开、保存文件

    如何使用命令 在Normal mode下,输入':'字符,在GVIM界面左下可以看到如图所示的界面: 这时候可以键入命令,输入完后按下键盘上的Enter键即可执行命令. 打开文件 使用命令:e [文件 ...

  5. vim——打开多个文件、同时显示多个文件、在文件之间切换

    打开多个文件: 1.vim还没有启动的时候: 在终端里输入  vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...

  6. 使用Vim打开十六进制的文件

    So Easy 这里使用打开 Hello.class 文件为例 首先使用 vim -b Hello.class 打开文件,然后在 Vim 的命令模式下输入 :%!xxd 回车即可看见文件内容. 效果: ...

  7. 12.JAVA之GUI编程打开与保存文件

    功能:java图形用户界面开发,练习打开保存文件 代码如下: import java.awt.FileDialog; import java.awt.Frame; import java.awt.Me ...

  8. C#用openfiledialog文件和savefileDialog打开和保存文件

    一 打开文件 Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog ...

  9. #用openfiledialog文件和savefileDialog打开和保存文件

    一.打开文件 Stream myStream = null;            OpenFileDialog openFileDialog1 = new OpenFileDialog();     ...

随机推荐

  1. 初始cfx开发webservice, 简单实例应用

    项目结构图: 步骤一: 添加maven 依赖包 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi=&q ...

  2. 物联网架构成长之路(7)-EMQ权限验证小结

    1. 前言 经过前面几小节,讲了一下插件开发,这一小节主要对一些代码和目录结构进行讲解,这些都是测试过程中一些个人经验,不一定是官方做法.而且也有可能会因为版本不一致导致差异. 2. 目录结构 这个目 ...

  3. conflicting types for xx错误

    编译libvmi 0.8版本时,出现以下错误: libtool: compile:  gcc -DHAVE_CONFIG_H -I. -I.. -I.. -fvisibility=hidden -I/ ...

  4. TinyXML2 的使用

    TinyXML是一个开源的解析XML的解析库,能够用于C++,能够在Windows或Linux中编译.这个解析库的模型通过解析XML文件,然后在内存中生成DOM模型,从而让我们很方便的遍历这棵XML树 ...

  5. 11款CSS3动画工具的开发

    本文展示了11个最好的和最令人惊异的CSS3动画工具,将为开发者是非常有帮助的.CSS3有设计师和开发人员之间的良好的声誉.它是在这里帮助他们创造惊人的结果. 有了这些动画工具,你可以创造一个轻松自由 ...

  6. Oracle数据导入指定表空间

    1. 打开工具Oracle SQL Plus 以dba身份登录sys用户 sqlplus /nologconn sys@url as sysdba 2. 创建用户并指定表空间 使用客户端工具或者Web ...

  7. MobaXterm 加装cygwin软件包

    上次在<MobaXterm: SSH/X远程客户端, Xmanager的最佳免费替代品>里面介绍了MobaXterm这个Windows上的便携 多合一unix工具箱,它基于Cygwin,集 ...

  8. maven 打jar 被引用后 出现 cannot resolve symbol 错误 生成jar包形式代码文件组织格式 非springboot文件组织格式

    项目A引用项目B A项目中pom引入没有报错,但是:1,idea里面查找到b项目中的代码时,会提示b代码中的引用不正确.提示无法解析语法 解压B的jar,发现目录是: springboot文件组织格式 ...

  9. Java知多少(38)抽象类的概念和使用

    在自上而下的继承层次结构中,位于上层的类更具有通用性,甚至可能更加抽象.从某种角度看,祖先类更加通用,它只包含一些最基本的成员,人们只将它作为派生其他类的基类,而不会用来创建对象.甚至,你可以只给出方 ...

  10. WPF 4.5 is here : check out the new features !

    So what's New in WPF Version 4.5 Developer Preview ? Here is a list of the new features and their re ...