切换导航
简历
工具
演示
查询
导航菜单
服务端
30
前端
114
数据库
82
进阶开发
8
桌面程序
2
QA
15
软件使用
36
规范协议
5
操作系统
11
AI
0
复用资源
6
硬件
0
标签
windows
Linux
Unix
外部链接
.NET Core SDK和运行时安装包
淘宝 NPM 镜像
查询网
Tables Generator线上表格转换工具
引用cdn在线脚本和样式
首页
操作系统
Linux 文本编辑器 vi 及相关命令
[TOC] ## 1. Linux 文本编辑器 ### 1.1. VI 文本编辑器 VI 是 Linux 默认安装的文本编辑器,VI可分为编辑模式和命令模式,下面是VI的一些相关命令 #### 1.1.1. 进入vi的命令 |命令|说明| |--|--| |vi filename|打开或新建文件,并将光标置于第一行首| |vi +n filename|打开文件,并将光标置于第n行首| |vi + filename|打开文件,并将光标置于最后一行首| |vi +/pattern filename|打开文件,并将光标置于第一个与pattern匹配的串处,<br>例如 pattern = user,那么进入文件后光标停留在文本中第一个user的首行| |vi -r filename|在上次正用vi编辑时发生系统崩溃,恢复filename| |vi filename....filename|打开多个文件,依次进行编辑| > Tips:注意上面的+和数字和空格,需要挨在一起的不要分开写,例如vi +2 filename,打开文件后光标定位在第二行首 #### 1.1.2. 移动光标类命令 |命令|说明|命令|说明| |--|--|--|--| |h或箭头左 |光标左移一个字符|l或箭头右 |光标右移一个字符| |space |光标右移一个字符|Backspace |光标左移一个字符| |k或Ctrl+p或箭头上 |光标上移一行|j或Ctrl+n或箭头下 |光标下移一行| |Enter |光标下移一行|w或W |光标右移一个字至字首(w 右移一个词,W 右移一个以空格分隔的词)| |b或B |光标左移一个字至字首(b左移一个词,B左移一个以空格分隔的词)|e或E |光标右移一个字至字尾| |) |光标移至句尾|( |光标移至句首| |} |光标移至段落开头|{ |光标移至段落结尾| |nG |光标移至第n行首|n+ |光标下移n行| |n- |光标上移n行|n$ |光标移至第n行尾| |H |光标移至屏幕顶行|M |光标移至屏幕中间行| |L |光标移至屏幕最后行|0 |(注意是数字零)光标移至当前行首| |$ |光标移至当前行尾|G|光标移至最后一行| |n + 空格 |光标会向右移动这一行的 n 个字符|n + Enter|光标向下移动 n 行| |gg|移动到这个文件的第一行,相当于 1G|| | #### 1.1.3. 屏幕翻滚类命令 |命令|说明|命令|说明| |--|--|--|--| |Ctrl+u |向文件首翻半屏|Ctrl+d |向文件尾翻半屏| |Ctrl+f |向文件尾翻一屏(向前翻页),相当于 [Page Down]按键|Ctrl+b |向文件首翻一屏(向后翻页),相当于 [Page Up] 按键| |nz |将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部|| | #### 1.1.4. 插入文本类命令 |命令|说明|命令|说明| |--|--|--|--| |i | 在光标前(在当前字符前插入文本) |I | 在当前行首(在行首插入文本) | |a | 光标后(在当前字符后添加文本) |A | 在当前行尾(在行末添加文本) | |o | 在当前行之下新开一行(在当前行后面插入一空行) |O | 在当前行之上新开一行(在当前行前面插入一空行) | |r | 替换当前字符 |R | 替换当前字符及其后的字符,直至按ESC键(以改写方式输入文本) | |s | 从当前光标位置处开始,以输入的文本替代指定数目的字符 |S | 删除指定数目的行,并以所输入文本代替之 | |ncw或nCW | 修改指定数目的字 |nCC | 修改指定数目的行 | |yy|将一行文本移到缺省缓冲区中|yn|将下一个词移到缺省缓冲区中| |ynw|将后面的n个词移到缺省缓冲区中|p|如果缺省缓冲区中包含一行文本,则在当前行后面插入一个空行井将缺省缓冲区中的内容粘贴到这一行中;如果缺省缓冲区中包含多个词,把这些词粘贴到光标的右边| |P|如果缺省缓冲区中包含一行文本,则正当前行前面插入一个空行井将缺省缓冲区中的内容粘贴到这一行中;如果缺省缓冲区中包含多个词,把这些词粘贴到光标的左边|nyy|n 为数字。复制光标所在的向下 n 列| |u|还原前一个动作|Ctrl+r|重做上一个动作| |.|小数点,意思是重复前一个动作|esc|退出编辑模式,回到一般模式中| > Tips:缓冲区指的便是复制剪切板 #### 1.1.5. 删除命令 |命令|说明|命令|说明| |--|--|--|--| |ndw或ndW | 删除光标处开始及其后的n-1个字 |do | 删至行首 | |d$ | 删至行尾 |ndd | 删除当前行及其后n-1行 | |x或X | 删除一个字符,x删除光标后的,而X删除光标前的 |Ctrl+u | 删除输入方式下所输入的文本| |c|修改文本直到按下Esc键|cw|修改下一个词| |cnw|修改接下来的n个词|dd|刪除光标所在的那一整行| #### 1.1.6. 搜索及替换命令 |命令|说明|命令|说明| |--|--|--|--| |/pattern|从光标开始处向文件尾搜索pattern |?pattern|从光标开始处向文件首搜索pattern | |n|在同一方向重复上一次搜索命令 |N|在反方向上重复上一次搜索命令 | |:s/p1/p2/g|将当前行中所有p1均用p2替代 |:n1,n2s/p1/p2/g|将第n1至n2行中所有p1均用p2替代 | |:g/p1/s//p2/g|将文件中所有p1均用p2替换|:1,$s/word1/word2/g|从第一行到最后一行查找 word1 字符串,并将该字符串替换为 word2| |:1,$s/word1/word2/gc|从第一行到最后一行查找 word1 字符串,并将该字符窗替换为 word2,替换前显示提示对话框是否确认替换|Ctrl+G|光标所在位置的行数和列数报告| #### 1.1.7. 选项设置 |命令|说明|命令|说明| |--|--|--|--| |all|列出所有选项设置情况 |term|设置终端类型 | |ignorance|在搜索中忽略大小写 |list|显示制表位(Ctrl+I)和行尾标志($) | |number|显示行号 |report|显示由面向行的命令修改过的数目 | |terse|显示简短的警告信息 |warn|在转到别的文件时若没保存当前文件则显示NO write信息 | |nomagic|允许在搜索模式中,使用前面不带“\”的特殊字符 |nowrapscan|禁止vi在搜索到达文件两端时,又从另一端开始 | |mesg|允许vi显示其他用户用write写到自己终端上的信息 || | #### 1.1.8. 最后行方式命令 |命令|说明| |--|--| |:n1,n2 co n3|将n1行到n2行之间的内容拷贝到第n3行下 | |:n1,n2 m n3|将n1行到n2行之间的内容移至到第n3行下 | |:n1,n2 d |将n1行到n2行之间的内容删除 | |:w |保存当前文件 | |zz |保存并退出 | |:W |写入文件 | |:w filename|写入文件 | |:e filename|打开文件filename进行编辑 | |:x|保存当前文件并退出 | |:q|退出vi | |:wq|保存后退出 | |:q!|不保存文件并退出vi | |:wq!|强制保存未退出 | |:!command|执行shell命令command | |:n1,n2 w!command|将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入 | |:r!command|将命令command的输出结果放到当前行| |:set nu|显示行号 | |:set nonu| 取消显示行号 | #### 1.1.9. 寄存器操作 |命令|说明| |--|--| |"?nyy|将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字 | |"?nyw|将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字 | |"?nyl|将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字 | |"?p|取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字 | |ndd|将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中| ### 1.2. VI常用技巧 VI命令可以说是Unix/Linux世界里最常用的编辑文件的命令了,但是因为它的命令集众多,很多人都不习惯使用它,其实您只需要掌握基本命令,然后加以灵活运用,就会发现它的优势 #### 1.2.1. 基本命令介绍 + **编辑命令** + i、a、r:在光标的前、后以及所在处插入字符命令(i=insert、a=append、r=replace) + cw、dw:改变(置换)/删除光标所在处的单词的命令 (c=change、d=delete) + x、d$、dd:删除一个字符、删除光标所在处到行尾的所有字符以及删除整行的命令 + **查找命令** + /string、?string:从光标所在处向后或向前查找相应的字符串的命令 + **拷贝复制命令** + yy、p:拷贝一行到剪贴板或取出剪贴板中内容的命令 #### 1.2.2. 常见问题及应用技巧 + 在一个新文件中读/etc/passwd中的内容,取出用户名部分 ```bash vi file # 在打开的文件file中光标所在处读入/etc/passwd :r /etc/passwd # 删除/etc/passwd中用户名后面的从冒号开始直到行尾的所有部分 # 也可以在指定的行号后读入文件内容,例如使用命令“:3r /etc/passwd”从新文件的第3行开始读入 /etc/passwd的所有内容。 # 还可以使用以下方法删掉文件中所有的空行及以#开始的注释行。 :%s/:.*//g cat squid.conf.default | grep -v ^$ | grep -v ^ ``` + 在打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,需要将所做修改存入临时文件 ```bash # 保存所做的所有修改,也可以将其中的某一部分修改保存到临时文件 vi file :w /tmp/1 # 把第20~59行之间的内容存盘成文件/tmp/1 vi file :20,59w /tmp/1 ``` + 用VI编辑一个文件,但需要删除大段的内容 + 首先利用编辑命令“vi file”打开文件,然后将光标移到需要删除的行处按Ctrl+G显示行号,再到结尾处再按Ctrl+G,显示文件结尾的行号 + :23,1045d 假定2次得到的行号为23和1045,则把这期间的内容全删除,也可以在要删除的开始行和结束行中用ma、mb命令标记,然后利用“:a,bd”命令删除 + 4.在整个文件的各行或某几行的行首或行尾加一些字符串 ```bash vi file # 在文件的第一行至最后一行的行首插入“some string” :3,$s/^/some string / # 在整个文件每一行的行尾添加“some string” :%s/$/some string/g # 在整个文件中替换“string1”成“string2” :%s/string1/string2/g # 仅替换文件中的第3行到第7行中的“string1”成“string2” # 其中s为substitute,%表示所有行,g表示global :3,7s/string1/string2/ ``` + 同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中 ```bash vi file1 file2 yy # 在文件1的光标处拷贝所在行 :n # 切换到文件2 (n=next) p # 在文件2的光标所在处粘贴所拷贝的行 :n # 切换回文件1 ``` + 替换文件中的路径:使用命令“:%s#/usr/bin#/bin#g”可以把文件中所有路径/usr/bin换成/bin。也可以使用命令“:%s//usr/bin//bin/g”实现,其中“”是转义字符,表明其后的“/”字符是具有实际意义的字符,不是分隔符。
扫一扫手机看
点击排行
windows 文件资源管理器使用
Layui 弹窗open使用说明
SQL Server 中字符串函数使用
C# 使用QQ邮箱代理做邮件接收功能
SQL Server关于apply的两种形式cross apply 和 outer apply
ASP.NET MVC 模型的自定义验证
nvm安装及常用命令
SQL Server 中数据类型转换
SQL Server 中WITH AS短语的使用
IE浏览器下AJAX缓存问题导致数据不更新的解决办法
订阅号