文章目录
显示行号与隐藏行号
- 永久性:编辑 ~/.vimrc 添加 set number
- 动态性:vi打开文件,输入 :set nu 或者 :set number 显示行号; 输入 :set nu! 隐藏行号
vi -d
如果已经打开了文件file1,再打开另一个文件file2进行比较:
:vert diffsplit file2
如果没有用vert命令,diffsplit则会分上下两个窗口
如果已经用split方式打开了两个文件file1,file2,又想比较两文件的不同。
分别在两个窗口里面输入命令:
:diffthis
如果更改了某个窗口的内容,vim又没有自动更新diff检查,可以使用如下命令更新:
:diffupdate
- 定位到不同点
]c 跳到下一个不同点
[c 跳到上一个不通点
- 合并文档
dp diff put
do diff get
- 上下文的折叠与查看
比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以这样设置:
:set diffopt=context:3
zf 创建折叠(使用数字表示创建有当前行到下多少行的折叠,比如3j就创建包括4行的折叠)
zo 打开折叠(l也可以打开折叠)
zc 关闭当前折叠
zm 关闭所有折叠
zr 打开所有折叠
zE 删除所有折叠
zd 删除当前折叠
za 若当前打开则关闭,若当前关闭则打开
zj 到下一折叠的开始处
zk 到上一折叠的末尾
批量替换
:%s/str1/str2/g
删除空行
1. 使用grep进行过滤
grep -v 选中不匹配的行
cat file.txt | grep -v '^$' > newtext.txt
2. vi
:%g/^$/d
删除DOS方式的回车^M
:%s/r//g
在多个文件中切换
- :bn 下一个文件
- :bp 上一个文件
批量注释
使用vi批量加注释“#”或者是// 等一些符号,看似简单但用处很大。
- ctrl+v使用方向键上下选择范围;
- shift+i进入编辑模式,添加“#”。随后按esc退出(也可理解为运行批量添加);此时批注已加好
- 删批注:ctrl+v使用方向键上下选择去除批注的范围,按“x”;
分屏
- vi -On file1 file2 左右
- vi -on file1 file2 上下
移动光标
- h j k l 左 下 上 右
- w 前移一个单词
- b 后移一个单词
- fc 把光标移动到同行的下一个字符“c”处
- Fc 把光标移动到同行的上一个字符"c"处
- H 把光标移动到当前屏幕的顶端
- M 把光标移动到当前屏幕的中部
- L 把光标移动到当前屏幕的底部
- zz 把当前行移动到屏幕中央
- zt 把当前行移动到屏幕顶部
- zb 吧当前行移动到屏幕底部
批量复制删除
删除 14行到210行
:14,210d
复制 14行到210行
:14,210y
粘贴的时候不自动缩进
进入编辑的文件 执行 :set paste ,粘贴完成后输入 :set nopaste 采用自动补全
搜索局部变量跟全局变量
gd
跳转到局部变量的定义处gD
跳转到全局变量的定义处,从当前文件从头开始搜索
实用编程命令
ci(
di(
yi(
修改 剪切 复制()
之间的内容
ca(
da(
ya(
修改 剪切 复制()
之间的内容, 包含()
以16进制打开文件
:%!xxd
#/ vi pcba_whole_misc.img
:%!xxd
00004000: 626f 6f74 2d72 6563 6f76 6572 7900 0000 boot-recovery...
00004010: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00004020: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00004030: 0000 0000 0000 0000 0000 0000 0000 0000 ................
00004040: 7265 636f 7665 7279 0a2d 2d66 6163 746f recovery.--facto
00004050: 7279 5f6d 6f64 653d 7768 6f6c 6500 0000 ry_mode=whole...
跳转到上次光标的位置
ctrl + i
ctrl + o