【linux】学习笔记Chap_22_强大的Vim编程
VIM
建议全程使用英语输入法
- 简介:vim 即 vi improved,现在已经全面替代vi,如果想用vi ,只能用vim -C 唤出vi模式。
- xxxxxxxxxx10 1# 启动frps2sudo systemctl start frps3# 自启动4sudo systemctl enable frps5# 重启应用6sudo systemctl restart frps7# 停止应用8sudo systemctl stop frps9# 查看应用的日志10sudo systemctl status frpsshell
1 | vim flie #打开文件 可编写 |
命令模式
vim 打开文件将进入命令模式,此时不能直接编辑文档
光标移动
- h 向左移动光标
- l (小写的L)向右移动光标
- j 向下移动光标
- k 向上移动光标
光标跃起
如果先按一个数字,再按光标移动对应的四个键,可以指定跳过多少
- 0 移动光标到行首
- ^ 移动光标到行首
- $ 移动光标到行尾
- w 移动到下个单词开始
- e 移动到下个单词结尾
- b 移动到上个单词开始
文章跳转
- gg 跳转到文章第一行
- G 跳转到文章最后一行
- 10G 转到第10行,numG是第num行
- :10 也是转到第10行,先使用
:set number
唤出编号(下面有提到)
文章翻页
- ^F 向下 翻页 ctrl+f
- ^B 向上 翻页 ctrl+b
- ^U 向上 翻半页 ctrl+u
- ^D 向下 翻半页 ctrl+d
设置行号
- :set number 标出行号
- :set nonumber 取消行号
查找
- / pattern 向下查找内容(pattern是要查找的文本,以下类同)
在命令模式下,按**/键后:命令行(屏幕底部)会显示一个/**字符,随后可以键入想查找的文本,再按回车,vim就会查找下一个匹配的文本。
如:
/lthero
按下回车后,光标就会跳转到该文本上。此时按n就会跳到下一个匹配的文本,按N会跳到上一个匹配的文本。
- ? pattern 向上查找内容(pattern)
替换与复制
- yy 复制光标所在行
- p 粘贴剪切版的内容
全文复制:
- ggyG:将光标移动到文章开头,复制到文章末尾
- Gygg:将光标移动到文章末尾,复制到文章开头
替换
- r 替换一个字符 。按一个r 替换一个字符
- R 进入**替换模式,将一直替换,**直到按^C退出
指定行替换(进入输入命令的模式,按shift+:)
- :s/pattern/replace/ 可将光标所在行的pattern替换成指定内容(replace),只替换从第一行中的第一个匹配项、
- :s?pattern?replace 则从最后一行开始,替换这行第一个匹配项
1 | 1:Linux Linux Linux |
- :s/pattern/replace/g (global) 一整行的pattern全部替换
1 | 1:Linux Linux Linux |
- :s/pattern/replace/gc (global confirm) 整行替换 替换之前将咨询
1 | replace with Unix (y/n/a/q/l/^E/^Y)? |
- : NUMs/pattern/replace**/g** 将第NUM行,整行的pattern替换**(如果不加/g,还是只换一个)**
1 | 10:Linux Linux Linux |
- : N,Ms/pattern/replace**/g** 将N-M行内进行替换
1 | 10:Linux Linux Linux |
全文替换
- 用**.(dote)代表当前行,$(dollar)代表最后一行,%** 代表在编辑缓存区(已经保存的文章)的全部行
1 | :.,$s/pattern/replace/g 全文替换 |
删除/剪切
- x 删除光标字符,其实会剪切到剪切板上,按p可以恢复(下面有讲到)
1 | heiQnous #将光标放在Q处 |
- X 删除光标左边字符
1 | heiQnous #将光标放在n处 |
- D 从光标处删除到行尾
1 | Linux Unix PHP MySQL |
- dmve (加上方向键左右) d左 就等同于X d右 等同于x
- dd 删除(剪切)一行
1 | :10,20d #删除10-20行 |
- db 删除光标前一个单词
全文删除:
- ggdG:将光标移动到文章开头,删除到文章末尾
- Gdgg:将光标移动到文章末尾,删除到文章开头
撤销
- u 撤销一步
从删除中恢复/粘贴
- p 将删除内容或剪贴板内容恢复,恢复到光标下一行
#1、2:指行号
1 | 1:Linux Linux Linux |
- P 恢复到光标上一行
复制&移动行
- 命令:co(copy)
: 5co10 复制第5行,插入到第10行下面
: 5**,10co20 复制5~10行,一同插入到第20行下面**
- 命令:m(move)
: 5m10 移动第5行,插入到第10行下面
: 4,8m20 移动4~8行,一同到20行下面
: 1,.m$ 第一行~当前移动,插入到最后一行
合并两行
按大写J 将当前行和下一行合并,在合并处会自动留下一个空格
1 | this is a |
执行命令
进入命令模式后,按冒号,进入执行命令模式
:!date,可以在原来的shell中执行命令,并能看到结果
1 | [No write since last change] |
:!! 执行上一条命令
:!sh 将暂停vi,打开一个新的shell,如 !bash
编辑过程中切换文件
- :e document
切换新文件时,原先在缓存中的文件就会丢失,所以要保存原文件
一般地,若未保存,vim不让切换
用e! document
强制切换
宏Macros
- :map x commands
功能:
- 将命令以x代替
**如:*在每行首添加注释/
1 | :map ^_ I/*<ESC> #(直接输入<ESC>) 或者 ESC是^[ ,删除是^H |
其中的I是进入到当前行首,
用unmap取消宏命令
- :unmap x
将已有文件插入
1 | :[line]r file r是read,表示在line行插入file文件内容 |
- 功能:将file整个讲稿并插入到指定行
1 | :10r file #插入第10行 |
- 如果不写数字,vim将自动添加光标所在行
结合执行命令
1 | :r !ls #将 ls 结果添加到当前行 |
写入文件
- **:**w 写入原文件
**:**w file 写入新文件
- **:**w! file 覆盖写入已存在文件
**:**w>> file 追加写入
1 | :10,20w >>file 将10到20行追加写入文件中 |
退出
- 保存并退出可以用快捷键ZZ,或者**:wq**
用ZZ为了不误触,导致不小心退出
- 注意 强制退出vim
1 | :q!<Return> |
- 其中的!(bang)告诉vim 不要管我是否保存了数据(可能造成丢失)
输入模式
- 按
将退出输入模式
插入
- 按 i 光标处向前插入 I 插入到行首
1 | Kankakee 在把光标移动到K上面 |
- o光标下行插入 O光标上行插入
- a光标处后插入 A插入到行尾
1 | Kankakee 在把光标移动到K上面 |
- **^W(ctrl+w)**删除一个单词
- ^U (ctrl+u)或 ^X(ctrl+x) 删除一行 (这是在编辑模式中)
修改
- s (substitute) 将光标处字符删除并进入编辑模式
- C 将光标处字符到结尾处字符全部删除 进入编辑模式
- S 或 cc 将整个行全部剪切,并进入编辑模式,而且光标在原来这行。与dd不同,dd只删除不进入编辑
恢复数据
若在编辑模式下长时间未保存,并且vim突然中断,那未保存内容将在隐藏的****.file.swap文件中
- 如ssh连接突然中止,或者电脑关机
1 | #用命令 |
- 如果删除隐藏文件,再打开原文件,数据只会显示到上次保存位置
- 所以,先恢复文件,再rm .swap文件
细节
vim 将空行用~代替
vim 中不能用(ctrl+c) 如果要输入^C 用ctrl+v ctrl+c 输入^V要输入两次ctrl+v
tab键也用ctrl+i代替
可视区块
如果想要处理一个区块(以列为单位),如下这种格式:
192.168.1.1 host1.class.net
192.168.1.2 host2.class.net
192.168.1.3 host3.class.net
192.168.1.4 host4.class.net
192.168.1.5 host5.class.net
192.168.1.6 host6.class.net
192.168.1.7 host7.class.net
192.168.1.8 host8.class.net
192.168.1.9 host9.class.net
如果要把每行的host1再添加到这行末尾,如192.168.1.1 host1.class.net host1,我们可以使用以下命令进行操作
在一般命令模式下
v 字符选择,会将光标经过的字符反白选择
V 行选择,会将光标经过的行反白选择
ctrl+v 块选择,用矩形方式选择
y 将反白选择部分复制
d 将反白选择部分删除
p 将复制或删除的部分粘贴
1、将光标移动太第一行的host1的h上,按ctrl+v ,此时可以看到VISUAL BLOCK的字样
2、将光标移动到最底部分,光标经过的区域会反色
3、按y进行复制,按下【y】后,反色的区域会不见
4、将光标移动到第一行的最右边,进入编辑模式,输入两个空格,再进入命令模式,按下【p】后就会粘贴成功
多窗口功能
如果有两个文件需要对照修改,总不能同时打开两个shell吧?vim也有划分窗口的功能!!!
在命令模式下:sp filename
1、如果要在新窗口打开另一个文件,就写对应的文件名,如果文件不存在会自动创建;
2、filename也可以不写,如仅输入:sp
会在两个窗口打开同一个文件,而且会同步修改
此时,可以利用【ctrl+w+j】移动到下面窗口,【ctrl+w+k】移动到上面的窗口
自动补全
平时在用jetbrain全家桶习惯了自动补全,vim其实也有,而且功能强大。以下按键全部在编辑模式
1、以扩展名作为语法补充。注意:文件名后缀一定要改成对应的扩展名,如.html/.css/.c/.py
按键:ctrl+x 再按 ctrl+o
在输入</后按【ctrl+x 】和【ctrl+o】后将补全head>
2、以当前编辑的【文件内容文字】作为关键词,自动补全
按键:ctrl+x 再按 ctrl+n
如,当前有三个变量var11,var22,var33,想要输出时,只用在var后按【ctrl+x】和【ctrl+n】即可出现补全列表
3、以当前目录内的【文件名】作为关键词
ctrl+x 再按 ctrl+f
如,输入te后,按【ctrl+x】和【ctrl+f】即可出现当前目录文件名补全列表