重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
vim可以分为三种状态,分别是 命令行模式(command mode) 、 输入模式(Insert mode) 和 底行模式(last line mode) ,这 3 种工作模式可随意切换,如下图所示。
成都创新互联主营安多网站建设的网络公司,主营网站建设方案,重庆App定制开发,安多h5微信小程序开发搭建,安多网站营销推广欢迎安多等地区企业咨询
使用vim编辑文件时,默认处于命令行模式。此模式下,可使用方向键(上、下、左、右键)或 k、j、h、i 移动光标的位置,还可以对文件内容进行复制、粘贴、替换、删除等操作。
下图所示是vim处于命令行模式的状态示意图。
在输入模式下,vim可以对文件执行写操作,类似于在Windows系统的文档中输入内容。
使vim进行输入模式的方式是在命令模式状态下输入 i 、 I 、 a 、 A 、 o 、 O 等插入命令(各指令的具体功能下表所示),当编辑文件完成后按 esc 键即可返回命令模式。
下图所示为vim处于输入模式模式下的示意图。
底行模式用于对文件中的指定内容执行保存、查找或替换等操作。
使vim切换到底行模式的方法是在 命令行模式 状态下按 : 键(注意是英文符号),此时vim窗口的左下方出现一个 : 符号,这是就可以输入相关指令进行操作了。
指令执行后vim会自动返回命令行模式。如想直接返回命令行模式,按 esc 即可。
下图所示为vim进入底行模式后的状态。
对于新手来说,经常不知道自己处于什么模式。不论是自己忘了,还是不小心切换了模式,都可以按一次 esc 键返回命令行模式。如果你多按几次 esc 键后听到"嘀————"的声音,则代表你已经处于命令行模式了。
打开文件
打开文件时光标处于文件尾部
打开文件时,光标定位到第几行
字符移动
这些移动键都可以加上数字(5h:向左移动5个字符格)
单词移动
行内跳转
行间移动
在底行模式下,直接给出行号,实现跳转
用法:起始地址,结束地址 s @要替换内容@替换后内容@gi(@分隔符)
例 :1,$s/a/A/g 把文件中全部的a换替换成A,全局替换
显示取消行号
设定自动缩进(写脚本时)
查找到的文本高亮显示
语法高亮
/etc/vimrc :全局配置文件,永久有效
~/.vimrc :个人配置文件,每个用户的家目录中,若不存在,手动创建
对于第一次用vim的童鞋,有几点需要提醒一下:
Vim 是 Vi 多模式命令行 编辑器 的加强版,通常默认的Unix或Linux系统中都默认自带Vi命令编辑器。当然,为了更好的体验,如果系统默认没有安装Vim,建议安装Vim。
通过本文的讲解,你将学会如何在Vim/Vi中快速的使用命令进行查找替换文本。
首先,启动Vim/Vi编辑器,处于正常模式下。如果你不确定是否处于正常模式下,这时你可以按“ESC”,编辑器就会进入正常模式。
替换命令的格式一般如下:
该命令表示在[range]的每一行中搜索{pattern},并将其替换为{string}。 [count]是一个乘以命令的正整数。
如果没有给出[range]和[count],则仅替换当前行中找到的模式。
例如,要搜索当前行中字符串“foo”的首次出现,并将其替换为“bar”,可以使用:
要替换当前行中搜索到的所有内容,可以添加 g 标志:
如果想搜索和替换整个文件中的匹配内容,使用百分比字符 % 作为范围。此字符指示从文件第一行到最后一行的范围:
如果省略 {string} 部分即上面的bar,则将其视为空字符串,相当于将匹配到的内容替换为空,既删除匹配到的内容。
以下命令删除当前行中字符串“foo”的所有实例:
当然,除了作为分隔符外,还可以使用任何其他非字母数字单字节字符,而不是斜杠字符( / )。例如:
要确认每个替换,可以使用 c 标志。
替换前会询问:
按 y 替换匹配项,或按l替换匹配项并退出。 按 n 跳过当前匹配,按 q 或 Esc 退出替换。 a 选项替换匹配项和所有剩余匹配项。
若要向下滚动屏幕,请使用 CTRL + Y ,向上滚动,请使用 CTRL + E 。
还可以使用 正则表达式 作为搜索模式,例如:
^ 符号表示与行首匹配, .* 表示匹配任意数量的字符。
默认情况下,搜索操作区分大小写;搜索“FOO”将与“FOo”不匹配。
要忽略搜索模式的案例,请使用 i 标志:
另一种强制忽略案例的方法是在搜索模式后添加 \c 。例如, /Linux\c 执行忽略大小写搜索。
当未指定范围时,替换命令仅在当前行中操作。
范围可以是一行,也可以是两行之间的范围。 行说明符之间可用英文 , 分隔 ; 字符分割。 可以使用绝对行号或特殊符号指定范围。
例如,要在从第3行到第10行的所有行中将所有出现的“ foo”替换为“ bar”,可以使用:
该范围是包含范围的,这意味着该范围包括第一行和最后一行。
. 字符表示当前行, $ 美元符号表示最后一行。 要在从当前行到最后一行的所有行中替换“ foo”:
也可以使用“ +”或“-”符号来设置行说明符,其后是从前一个行号添加或减去的数字。 如果省略符号后的数字,则默认为1。
例如,从当前行和接下来的四行开始,用“ bar”替换每个“ foo”,键入:
替代命令将模式作为字符串而不是整个单词查找。 例如,如果您正在搜索“ gnu”,则搜索查找匹配“ gnu”嵌入在较大单词(例如“cygnus” 或 “magnum”)中的情况。
要搜索整个单词,请键入\ 标记单词的开头,输入搜索模式,键入标记单词的结尾:
例如,要搜索单词“ foo”,可以使用 \foo\ :
Vim会跟踪您在当前会话中运行的所有命令。
要浏览历史记录以查找先前的替代命令,请输入 :s 并使用向上或向下箭头键查找先前的替代操作。 要运行该命令,只需按Enter。 您也可以在执行操作之前编辑命令。
注释行(在行前添加#)从5到20:
取消注释行从5到20,恢复以前的更改:
将“苹果”,“橙色”和“芒果”的所有实例替换为“水果”:
删除每行末尾的空格:
搜索和替换在Vim中是一个非常强大的功能,学会使用它能使您可以快速更改文本,提高自己的工作效率。
欢迎通过查看我个人介绍信息,私信跟我沟通!
vi profile
返回
:q 退出
:wq或者:x或者shift+zz 保存并退出
:q! 不保存并退出
:w 保存
:w! 强制保存
编辑到输入模式:
i 在当前光标前面输入
I 在当前光标所在行的行首,转换为输入模式
a 在当前光标后面输入
A 在当前光标所在行的行尾,转换为输入模式
o 在当前光标所在行的下方,新建一行,并转为输入模式
O 在当前光标所在行的上方,新建一行,并转为输入模式
1、 移动光标
字符:方向键上下左右或者键盘kjhl(上下左右)
单词:w移至下一个单词的词首;e跳至当前或下一个单词的词尾;b跳至当前或前一个单词的词首
行内:0绝对行首;^行首的第一个非空白字符;$绝对行尾
行间:G文章末尾;3G第3行;gg文章开头
翻屏:ctrl f【往后翻】;Ctrl b【往前翻】
2、 删除、替换单个字符
x删除光标位置字符;3x删除光标开始3个字符;r替换光标位置字符
dw删除一个单词;4dw删除光标开始的4个单词;dd删除光标所在行;5dd删除光标开始的5行
3、复制粘贴剪切
yw复制一个单词,p在该行粘贴单词;yy复制整行,p在该行下方粘贴整行
dd剪切整行,p再粘贴整行;dw剪切一个单词,p再粘贴一个单词
4、 撤销重做
u:撤销;ctrl+r:重做撤销的操作;.重复上一步的操作【假设先dd,再.,会再执行dd命令】
1、 set设置
set nu
set nonu
set readonly #设置只读文件,不能修改,只在当前环境有效,退出文件,再次打开,这个只读就无效了
set noreadonly #取消只读
2、 /查找
/after查找文档中的after【可以找到所有的after】,n向下翻,N向上翻
:/after查找文档中的after所在行【可以找到所有的after】,n向下翻,N向上翻
3、!执行命令
比如:查找root目录
:!ls /root/
4、 查找并替换
格式
【 :查找范围s/查找的词/要替换的词/ 】
或者【:查找范围s#查找的词#要替换的词# 】
或者【:查找范围s%查找的词%要替换的词%】,
即分隔符可以是/、#、%
其中, 查找范围 包括【.当前光标行】;【$末尾行】;【%全文】;【g一行内全部替换】;【i忽略大小写】
比如 【 :.,$s/after/before/】 表示在当前光标行【.】到末尾【$】这个范围内,将after替换为before, 但是如果一行有多个after的话,只会把第一个after替换掉 。
比如 【 :%s/after/before/】 表示在全文,将after替换为before,但是如果一行有多个after的话,只会把第一个after替换掉。
比如 【:%s/after/before/g】 ,表示在全文,将after替换为before,但是 如果一行有多个after的话,会把该行所有after替换掉,因为在命令里面加了g 。
比如 【:%s/after/before/gi】 ,表示在全文,将after替换为before,且忽略大小写并替换一行内所有after。
比如 【 :%d或者dG】 ,表示删除全文
比如 【:1,$-4d】 ,表示删除第一行到倒数第5行的数据
比如 【:1,4y】 ,表示复制1到4行,再按p可粘贴这4行
1)单字符替换:在命令模式下使光标位于要替换的字符,按r,再按需要的字符;
2)取代字符串:在命令模式下
$s/string/replae/g
会将全文的string字符串取代为replace字符串,其中1,$s就是指搜寻区间为文章从头至尾的意思,g则是表示全部取代不必确认。
%s/string/replace/c:同样会将全文的string字符串取代为replace字符串,和上面指令不同的地方是,%s和1,$s是相同的功能,c则是表示要替代之前必须再次确认是否取代。
1,20s/string/replace/g:将1至20行间的string替代为relpace字符串。