2018年8月7日第七节课笔记——VIM
内容摘要
一、vim介绍
- 一般模式:dd命令,把一行删除,复制某行粘贴等。
- 编辑模式:进入编辑模式需要按【i】这个按键过程,用键盘对文档字、符进行修改,还有回车、换行等。
- 命令模式:像less命令,/+关键字,可以查找等。把文档里的123改为456,可以批量操作的。包括:wq也是命令模式。
二、vim颜色显示和移动光标
- 相同的文件在不同的目录下,就有可能会导致颜色不存在;在centos里面/etc/下面的文件往往是配置文件,在/etc/下面就会显示颜色,把它放到其他地方它就不会显示颜色,这是它的一个特性。
- 但是/etc/fstab移到/tmp/passwd仍然有颜色,这是为什么呢?这是因为vim的颜色还与文件的具体内容有关系,不只如此,它的颜色还与文件名字有关。(如内容中添加#开头的内容或者文件名后缀更改为.sh结尾时原本没有颜色的内容也会显示颜色)
- vim有自己的配置文件:/etc/vimrc
- 在用户家目录下也可以配置vim的配置文件,默认是不存在的,例: /root/.vimrc
四、vim一般模式下的移动光标
五、一般模式下复制剪切粘贴
- 快捷键x表示向后删除一个字符,X表示向前删除一个字符
- 快捷键n+x 向后删除n个字符
- 快捷键dd 删除/剪切光标所在的那一行
- 快捷键ndd(n为number缩写,即行数),删除/剪切光标所在行之后的n行
- 快捷键yy 复制光标所在行
- 快捷键nyy n为number缩写,即行数),从光标所在行开始,向下复制n行
- 快捷键p 从光标所在行开始,向下粘贴已经复制或者粘贴的内容
- 快捷键P(大写) 从光标所在行开始,向上粘贴已经复制或者粘贴的内容
- 快捷键u 还原上一步操作(最多恢复50次);Ctrl+r反向恢复。
- 快捷键v 按v后移动光标会选中指定字符,然后可以实现复制、粘贴等操作
六、进入编辑模式
- 可以进入到了可以编辑文本文档的一种模式。
- 不同的按键方式可以产生不同的作用。
- 快捷键 i 在当前字符前插入
- 快捷键 I在光标所在的行行首插入
- 快捷键o在当前行的下一行插入新的一行
- 快捷键O在当前行的上一行插入新的一行
- 快捷键a在当前字符后插入
- 快捷键A在光标所在行的行尾插入
- 在编辑模式中,判断一行是否是同一行,可以看右下角的行列提示,或者用上下键操控光标移动观看。
七、命令模式
- 命令/word 向光标之后查找一个字符串word,按n向后继续搜索
- 命令?word 向光标之前查找一个字符串word,按n向前继续搜索
- 命令:n ,n2s/word1/word2/g 在n1-n2行之间查找word1并替换为word2,不加g则只替换每行的第一个 word1
- 命令:1,$s/word1/word2/g 将文档中所有(不指定)的word1替换为word2,不加g则只替换每行的第一个word1
- 特殊情况:需要替换的内容本身带有/号,用\对命令进行脱义,也可以用“#”或者“@”来代替“\”进行脱义。
- 命令:w 保存文本
- 命令:q 退出vim
- 命令:w! 强制保存,在root用户下,即使文本只读也可以完成保存
- 命令:q! 强制退出,所有改动不生效
- 命令:wq 保存并退出
- 命令:set nu 显示行号
- 命令:set nonu 不显示行号
- 当某些内容是高亮的时候,你不想看高亮时,可以输入命令:nohl
- 命令:x在更改文件之后去操作的效果和:wq是一摸一样的。如果打开文件但没有操作过,使用:wq它会更改mtime更改你查看文件那一刻的时间,使用:x则不会更改mtimes
八、vim实践
- 分别向下、向右、向左、向上移动6个字符(6j 6l 6h 6k)。
- 分别向下、向上翻两页(分别按两次ctrl+f和ctrl+b)。
- 把光标移动到第49行(49G)。
- 把光标移动到行尾,再移动到行首(Shift+4, Shift+6)。
- 移动到1.txt文件的最后一行(G)。
- 移动到文件的首行(gg)。
- 搜索文件中出现的“dnsmasq”,并数一下该字符串出现的次数(/dnsmsq 然后按n)。
- 把从第1行到第10行出现的dnsmasq替换成dns(:1,10s/dnsmasq/dns/g)。
- 还原上一步操作(u)。
- 把整个文件中所有的etc替换成cte(:1,$s/etc/cte/g)。
- 把光标移动到第25行,删除字符串 “ly”(25G 然后按l向右移动光标找到"ly",按v选中,然后按x)。
- 还原上一步操作(u)。
- 删除第50行(50G dd)。
- 还原上一步操作(u)。
- 删除第37-42行的所有内容(37G 6dd)。
- 还原上一步操作(u)。
- 复制第48行的内容并粘贴到第52行下面(48G yy 52G p)。
- 还原上一步操作(u)。
- 复制第37-42行的内容并粘贴到第44行上面(37G 6yy 44G P)。
- 还原上一步操作(按u)。
- 把第37-42行的内容移动到第19行下面(37G 6dd 19G p)。
- 还原上一步操作(按u)。
- 把光标移动到首行,把第1行内容改为“#!/bin/bash”(先按gg,把光标定位到第1行,然后按字母A,进入编辑模式,同时>光标到行末尾,进行修改操作,完成后按ESC)。
- 在第1行下面插入新的一行,并输入“# Hello!”(按o进入编辑模式,同时光标向下另起一行,输入“# Hello!”)。
- 保存文档并退出(按Esc键,输入“:wq”)。
课堂笔记:
九、vim扩展
快捷键 |
解释 |
:e [path to file] |
打开一个文件 |
:w |
存盘 |
:saveas [path to file] |
另存为 <path/to/file> |
:x、 ZZ 、:wq |
保存并退出 (:x表示仅在需要时保存;ZZ不需要输入冒号并回车) |
:X |
设置密码保存并退出,使用此命令后cat 该文件会显示乱码,再次打开需输入密码 |
:q! |
退出不保存 |
wq! |
强制保存退出 |
:qa! |
强行退出所有的正在编辑的文件,就算别的文件有更改。 |
:bn、 :bp |
你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。 |
vim编辑器的替换模式与可视模式:
- 在一般模式下按键盘上的r和R进入替换模式。如果按小r那么这时候就进入了替换模式,你下一个输入的字符会把你当前光标所在处的字符替换,然后自动退出替换模式。如果你按的是大R那么你下面输入的所有字符会把后面的字符依次替换,直到按退出替换模式。
- 在一般模式下按键盘上的v和V进入可视模式。如果是按小v那么这时候就时入了视图模式,这时候你移动光标会把你光标所在处到光标结尾处的所有字符选中,这时候可以进行复制,删除等操作。如果是按大V同样也是进入了视图模式,这时候移动光标会把光标所在行到光标结尾的行的所有内容选中,也可以进行复制,删除等操作。注意:使用在一般模式使用“ctrl+v”组合键可以进入块操作模式在这个模式下和可视模式差不多,但是选择的内容不同,大家可实际操作看看
- 删除从光标所在处到行尾字符:在一般模式下输入大写“D”或者输入“d$”
- 删除从光标所在处到行首字符:在一般模式下输入大写“d^”
- 删除从光标所在行到文件末尾行:在一般模式下输入大写“dG”
- 删除指定范围内所有行例:删除10到15行的所有内容在一般模式下输入“:10,15d”回车
- 把正在编辑的文件另存为新文件例:把正在编辑的文件另存为到“/root/”下面并保存为1.txt在一般模式下输入“:w /root/1.txt”
- 把正在编辑的文件的第10行到第15行另存为1.txt并保存到root目录下在一般模式下输入“:10,15 w /root/1.txt”
- 把其它文件的内容导入到正在编辑的文件的光标所在处例:把“/root/1.txt” 文件的内容,导入到下在编辑的文件的第10行下面
- 正在编辑文件时,不退出文件仍可以运行linux命令,列:我下在编辑一个文件,但这时候我想查看“/root/1.txt” 文件的内容,但是我不想退出我正在编辑的文件,那么我们可以这样:在编辑模式下输入“:! cat /root/1.txt”
- 把命令的执行结果导入到正在编辑的文件的光标所在处,这题我们可以结合上面两题,在一般模式下输入“:r ! cat /root/1.txt”
- 查找替换的功能使用
- 例:在10到15行的行首增加“#”
- 在一般模式下输入“:10,15s/^/#/”
- 例:在10到15行的行首去掉“#”
- 在一般模式下输入“:10,15s/^#//”
- 例:在10到15行的行首增加“//”
- 在一般模式下输入“:10,15s/^/\/\//”或者“:10,[email protected]^@//@”或者“:10,15s#^#//#”
注意:在上面所有命令的最后面都可以加g或者c一起配合使用,g的意思是行中出现的所有指定字符都替换,但是如果加了g那么前面就不能出现位置定义字符,反之前面出现的位置定义字符,那么后面就不可以出现g。在后面加c可以跟用户交互,在查找到符合命令的字符提示用户是否替换,需要用户确认,否则不需要确认
- 把输入的指定字符替换为指定的字符,例:在编辑一个文档的时候,我要频繁的输入“abcdefghijklmnopqrstuvwxyz”这样的连续字符串,这时候我想只输入一个或者一串指定字符就可以替换为刚才的字符,比如我指定输入“aming”系统就会自动把“aming”替换成“abcdefghijklmnopqrstuvwxyz”
- 在一般模式下输入“:ab aming abcdefghijklmnopqrstuvwxyz”
- 然后回车,再进入编辑模式,当你输入“aming”的时候就会发现自动替换成了“abcdefghijklmnopqrstuvwxyz”
注意:命令中ctrl+v和ctrl+b是键盘上的组合键,不是输入进去的字符,是需要按的组合键,其中第一个ctrl+v就照按,第二个ctrl+b是要定义的快捷键,根据自己需要的设置按。然后“I”的意思就是一般模式下的“I”进入插入模式并将光标移动到行首,然后接着输入“#”号,后面“”的意思是退出编辑模式
- 例:我现正在编辑1.txt文件,然后我想再打开root目录下的2.txt同时编辑,并把窗口上下水平分隔,一起显示在一般模式下输入“:new /root/2.txt”
- 例:我现正在编辑1.txt文件,然后我想再打开root目录下的2.txt同时编辑,并把窗口左右垂直分隔,一起显示在一般模式下输入“:vsplit /root/2.txt”
注意:在一般模式下按“ctrl+w”组合键,再按左右,或者上下方向键,可以在不同窗口之间切换如果在一般模式下输入“:only”那么只保留当前正在编辑的窗口,其它全关闭