Vi 的常用命令
1. vi 的三种工作模式
- 命令模式
- 打开文件首先进入命令模式, 是使用
vi的入口; - 通过命令对文件进行常规的编辑操作, 例如: 定位,翻页,复制,粘贴,删除等;
- 打开文件首先进入命令模式, 是使用
- 末行模式
- 执行保存,退出等操作,是
vi的出口; :wq:表示write&quit;
- 执行保存,退出等操作,是
- 编辑模式
- 正常的编辑文字

2. vi 操作文件
vi 文件名: 打开或新建文件;vi 文件名 +行数: 打开文件并且定位行, 如果不指定行号,会直接定位到文件末尾;
2.1 重复次数
- 在命令模式下,先输入一个数字,再跟上一个命令,可以让该命令重复执行指定次数;
2.2 移动和选择
- 方向移动
h: 左移j: 下移k: 上移l: 右移{: 按段移动,上移;以空行来区分段落;}: 按段移动,下移;w: 向后移动一个单词(word);b: 向前移动一个单词0: 行首^: 行首,第一个不是空白字符的位置;$: 行尾
- 行数移动
gg:文件顶部,15gg表示跳转到第15行;G: 文件末尾,15G表示跳转到第15行;:数字: 跳转到数字对应行数;
- 屏幕移动
ctrl + d: 向下翻半屏;ctrl + u: 向上翻半屏;ctrl + f: 向下翻一屏;(forward)ctrl + b: 向上翻一屏;(back)H: 屏幕顶部;(Head)M: 屏幕中间;(Middle)L: 屏幕底部;(Low)
- 括号切换
- 在程序世界中,
()[]{}使用频率很高,而且都是成对出现的; %: 括号匹配及切换;
- 在程序世界中,
- 标记
- 在开发时,某一块代码可能需要稍后处理,例如编辑,查看;
- 此时,先使用
m添加一个标记,这样可以在需要时,快速地跳转回来或者执行其他编辑操作; - 标记名称可以是
a~z或者A~Z之间的任意一个字母; - 添加了标记的行如果被删除,标记同时被删除;
- 如果在其他行添加了相同名称的标记,之前添加的标记也会被替换掉;
mx: 添加标记x,x是a~z或者A~Z之间的任意一个字母;(mark)'x: 直接定位到标记x所在的位置
2.3 编辑操作(命令模式)
- 选中文本(可视模式)
- 学习复制命令前,应该先学会怎么样选中要复制的代码;
v: 按字符移动选中文本;V: 按行移动选中文本,可以配合d,y,>>,<<实现对文本块的删除,复制,左移,右移;ctrl + v: 垂直方向选中文本;
- 撤销和恢复撤销
u: 撤销上次命令;(undo)ctrl + r: 恢复撤销的命令;(redo)
- 删除文本(类似于剪切操作)
x: 删除光标后一个字符,相当于 Del;(cut)X: 删除光标前一个字符,相当于 Backspace;d(移动命令): 删除移动命令对应的内容;例如d0: 删除光标前本行所有内容,不包含光标所在字符;dw: 删除光标开始位置的字符,包含光标所在字符;
dd: 删除光标所在行;8dd: 表示从当前光标所在的行开始剪切8行;
D: 删除光标后本行所有内容,包含光标所在字符;
- 复制和粘贴
- 复制命令会将选中的文字保存在缓冲区;
- 删除命令会将删除的文字删除的文字保存在缓冲区;
y(移动命令): 复制; (copy)yy:复制一行, 可以8yy复制8行;p: 粘贴(paste)
- 缩排和重复执行
>>: 向右增加缩进;(一次在选中代码前增加4个空格)<<: 向左减少缩进;.: 重复上次命令;
2.4 替换
r: 替换当前字符串(命令模式)R: 替换当前行光标后的字符(替换模式)R命令可以进入替换模式,替换完成后,ESC可以回到命令模式;- 替换命令的作用就是不用进入编辑模式,对文件进行轻量级的修改;
2.5 查找
/str: 查找str;- 查找到指定内容之后,使用
Next查找下一个出现的位置:n: 查找下一个;N: 查找上一个;- 如果不想看到高亮显示,可以随便查找一个文件中不存在的内容即可;
- 单词快速匹配
*: 向后查找当前光标所在单词;#: 向前查找当前光标所在单词;
2.6 查找并替换
- 在
vi中查找和替换命令,需要在末行模式下执行; - 格式:
:%s///g; - 全局替换:
:%s/abc/123/g: 将所有的abc替换成123;
- 可视区域替换
- 先选中要替换文字的范围;
:'<,'>s/旧文本/新文本/g
- 确认替换
- 如果把末尾
g改成gc,在替换的时候,会有提示! :%s/旧文本/新文本/gc- 提示语:
y: 替换(yes)n: 不替换(no)a: 替换所有(all)q: 退出替换(quit)l: 替换最后一个(last),并把光标移动到行首;^E: 向下滚屏;^Y: 向上滚屏;
- 如果把末尾
2.7 插入命令
- 进入
编辑模式的命令:i: 在当前字符前插入文本;(insert)I: 在行首插入文本;(insert)a: 在当前字符后添加文本;(append)A: 在行末添加文本;o: 在当前行后面插入一空行;O: 在当前行前面插入一空行;
# 示例: 利用可视块模式给多行代码增加注释
1. 在命令模式下,移动到要添加注释的第一行代码, 按 "^" 来到行首;
2. 按 ctrl + v 进入可视块模式;
3. 使用 j 向下连续选中要添加的代码行;
4. 输入 I 进入编辑模式,并在行首插入, 注意,一定使用大写 I;
5. 输入 # 也就是注释符号;
6. 按下 ESC 返回到命令模式,返回之后,vi会在之前选中的每一行代码前插入 #;
2.8 分屏命令
- 属于
vi的高级命令,可以同时编辑和查看多个文件; 末行命令主要是针对文件进行的操作:- 保存,退出,保存&退出,搜索&替换,另存,新建,浏览文件;
:e .: 会打开内置的文件浏览器,浏览当前目录下的文件;:n 文件名: 新建文件;(new):w 文件名: 另存为,但是仍然编辑当前文件,并不会切换文件;(write)- 在实际开发中,可以使用
w命令阶段性的备份代码;
- 在实际开发中,可以使用
- 分屏命令
- 使用分屏命令,可以同时编辑和查看多个文件;
:sp [文件名]: 横向增加分屏;(split):vsp [文件名]: 纵向增加分屏;(vertical split)
- 切换分屏窗口
- 分屏窗口都是基于
ctrl + W这个快捷键的,(w = window) ctrl + w + w: 切换到下一个窗口;ctrl + w + r: 互换窗口;(reverse)ctrl + w + c: 关闭当前窗口,但是不能关闭最后一个窗口;(close)ctrl + w + q: 退出当前窗口,如果是最后一个窗口,则关闭vi;(quit)ctrl + w + o: 关闭其他窗口;(other)
- 分屏窗口都是基于
参考资料:
Vi 的常用命令的更多相关文章
- linux vi编辑常用命令
linux vi编辑常用命令 来源:互联网 作者:佚名 时间:07-10 21:31:14 [大 中 小] linux vi编辑常用命令,需要的朋友可以参考下 vi编辑器中有三种状态模式 1. ...
- VI/VIM 常用命令
VI/VIM 常用命令=========== 整理自鸟哥的私房菜 ---------- - 移动光标 命令 | 描述----------------------- ...
- VI编辑器常用命令
Linux下的文本编辑器有很多种,vi 是最常用的,也是各版本Linux的标配.注意,vi 仅仅是一个文本编辑器,可以给字符着色,可以自动补全,但是不像 Windows 下的 word 有排版功能. ...
- Linux 操作系统下 VI 编辑器常用命令详细介绍
一.Vi 简介 vi是unix世界中最通用的全屏编辑器,linux中是用的是vi的加强版vim,vim同vi完全兼容,vi就是"visual interface"的缩写.它可以执行 ...
- Linux vi 编辑器 常用命令行
1.vi 模式 a) 一般模式: vi 处理文件时,一进入该文件,就是一般模式了. b) 编辑模式:在一般模式下可以进行删除,复制,粘贴等操作,却无法进行编辑操作.等按下'i,I,o,O,a, ...
- 【转】VI/VIM常用命令
原文网址:http://www.blogjava.net/woxingwosu/archive/2007/09/06/125193.html Vi是“Visual interface”的简称,它在Li ...
- vi的常用命令
https://zhidao.baidu.com/question/332242228.html vi的基本操作 a) 进入vi 在系统提示符号输入vi及文件名称后,就进入vi全屏幕编辑画面: $ v ...
- shell编辑器vi的常用命令
一:翻页 ctrl+u向上翻半页 ctrl+f向上翻一页 ctrl+d 向下翻半页 ctrl+b 向下翻一页 二:移动光标指令 0: 光标移至当前行首 $: 光标移至当前行尾 三:常用插入.删除指令 ...
- Vim和Vi的常用命令
Vim 文本编辑器 1.Vim 和 Vi: 两者都是多模式编辑器: Vim 是 Vi 升级版,再兼容 Vi 所有指令的同时增加了一些新功能支持: 特点: 语法加亮:使用不同的颜色加亮代码: 多级撤销: ...
随机推荐
- selenuim爬虫实战(日lofter.com)
LOFTER是网易公司2011年8月下旬推出的一款轻博客产品. LOFTER专注于为用户提供简约.易用.有品质.重原创的博客工具.原创社区,以及有品质的手机博客应用. LOFTER首次采用独立域名,口 ...
- 使用asp.net调用谷歌地图api
<html xmlns="http://www.w3.org/1999/xhtml"> <head> <title></title> ...
- qtcreator 中文乱码
qt输入法不能用,ui中不能显示中文,开发板不能显示中文,这几个一直困扰这我,网上查找资料,在代码中添加各种支持,都没有解决问题.今天刚好解决了,记录于此. 参考链接 http://blog.163. ...
- 输出JS代码中的变量内容
一. 输出JS代码中的变量内容 1. 可以直接以提示框的形式输出 alert("输出的内容"); 2. 可以输出到网页的某个位置 a. 在显示输出的位置放一个标签 <a id ...
- PHP导入导出excel表格图片的代码和方法大全
基本上导出的文件分为两种: 1:类Excel格式,这个其实不是传统意义上的Excel文件,只是因为Excel的兼容能力强,能够正确打开而已.修改这种文件后再保存,通常会提示你是否要转换成Excel文件 ...
- loadruner11 socket脚本-10053错误
背景: socket 10053异常:软件主动放弃一个连接,原因是超时或协议错误.如果LR客户端报10053异常,说明LR在执行套接字操作时,发生通信超时.网络中断或其它异常,主动将Socket连接断 ...
- zoj 3370(二分+二分图染色)
题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemId=3912 思路:二分覆盖直径,然后判断是否有冲突(即距离小于等于直径的不 ...
- C# 笔记 Func<TResult> 委托、Action<T> 委托
https://blog.csdn.net/wanglui1990/article/details/79303894 Func<ΤResult> 委托:代理(delegate)一个返回类型 ...
- 数据库布尔型状态字段互斥性的SQL更新操作
一个配置表或者一个存储了多条状态的表,需要在某个状态中做切换,而当前是否启用状态标记是用0和1来标识的.这个时候通常 1表示正在使用中,0表示不在使用中.通常有些业务会做一些配置的状态切换,就会出现要 ...
- 《C++ Primer Plus》第6章 学习笔记
使用引导程序选择不同操作的语句后,程序和编程将更有趣.C++提供了if 语句 .if else 语 句 和 switch 语句来管理选项.if 语句使程序有条件地执行语句或语句块,也就是说,如果满足特 ...