[No0000192]Vim打开和保存文件-Vim使用技巧(7)
使用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)的更多相关文章
- vim 打开多个文件
一.如果在终端还没有打开vim 1.vim横向分屏打开多个文件 vim -o 文件1 文件2 2.vim纵向分屏打开多个文件 vim -O 文件1 文件2 二.如果在终端已经打开vim 1.横向分屏打 ...
- vim打开多个文件、同时显示多个文件、在文件之间切换
打开多个文件: 1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...
- silverlight打开和保存文件
因为Silverlight是运行在浏览器中的客户端,所以对于程序的操作权限要求比较严格,以本篇的主题来说,一个表现就是不能够随意的进行文件打开和保存操作,如果在代码中直接使用Stream来操作文件,会 ...
- VIM之打开、保存文件
如何使用命令 在Normal mode下,输入':'字符,在GVIM界面左下可以看到如图所示的界面: 这时候可以键入命令,输入完后按下键盘上的Enter键即可执行命令. 打开文件 使用命令:e [文件 ...
- vim——打开多个文件、同时显示多个文件、在文件之间切换
打开多个文件: 1.vim还没有启动的时候: 在终端里输入 vim file1 file2 ... filen便可以打开所有想要打开的文件 2.vim已经启动 输入 :open file 可以再打开 ...
- 使用Vim打开十六进制的文件
So Easy 这里使用打开 Hello.class 文件为例 首先使用 vim -b Hello.class 打开文件,然后在 Vim 的命令模式下输入 :%!xxd 回车即可看见文件内容. 效果: ...
- 12.JAVA之GUI编程打开与保存文件
功能:java图形用户界面开发,练习打开保存文件 代码如下: import java.awt.FileDialog; import java.awt.Frame; import java.awt.Me ...
- C#用openfiledialog文件和savefileDialog打开和保存文件
一 打开文件 Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); openFileDialog ...
- #用openfiledialog文件和savefileDialog打开和保存文件
一.打开文件 Stream myStream = null; OpenFileDialog openFileDialog1 = new OpenFileDialog(); ...
随机推荐
- Ubuntu11.04安装引导BURG
时间:11-05-10 BURG是一个漂亮的引导程序,可以代替ubuntu默认的引导. ubuntu11.04安装方法如下: sudo add-apt-repository ppa:n-muen ...
- java框架篇---hibernate主键生成策略
Hibernate主键生成策略 1.自动增长identity 适用于MySQL.DB2.MS SQL Server,采用数据库生成的主键,用于为long.short.int类型生成唯一标识 使用SQL ...
- Android Launcher分析和修改3——Launcher启动和初始化
前面两篇文章都是写有关Launcher配置文件的修改,代码方面涉及不多,今天开始进入Launcher代码分析. 我们开机启动Launcher,Launcher是由Activity Manager启动的 ...
- Go Revel - app.conf
##概览 `app.conf`为应用程序的配置文件,它使用`goconfig`的语法,与windows的ini文件类似. 示例: app.name=chat app.secret=pJLzyoiDe1 ...
- Java编程的逻辑 (78) - 线程池
本系列文章经补充和完善,已修订整理成书<Java编程的逻辑>,由机械工业出版社华章分社出版,于2018年1月上市热销,读者好评如潮!各大网店和书店有售,欢迎购买,京东自营链接:http: ...
- 3D 特征点概述(2)
还是紧接着上一文章的思路继续介绍3D特征点的基本概念问题,还是这个表格: Feature Name Supports Texture / Color Local / Global / Regional ...
- Netbeans rcp中获得本地文件系统路径
通过file协议 —————————————————————————————————————————————————————— URL url = new URL("file:///E:/A ...
- Android Things:撸起袖子来创建第一个Things工程
http://blog.csdn.net/p106786860/article/details/60161020 ——————————————————————————————————————————— ...
- linux 防火墙 ufw使用
ufw是ubuntu是默认的防火墙配置工具,相对于iptables,ufw使用更加简单 ufw基本操作 1 []是代表可选内容,需要root权限 ufw [--dry-run] enable|di ...
- 简单网络搭建与测试 mininet
简介 本实验是基于pox搭建简单的网络并测试网络的连通性,利用mininet代码创建一个交换机四个主机的拓扑,测试各主机之间的连通性以及h1.h4之间的带宽. 代码 实验代码如下所示,SingleSw ...