- 文件比较
1. 使用vim的比较模式打开两个文件: vim -d file1 file2 或 vimdiff file1 file2
2. 如果已经打开了文件file1,再打开另一个文件file2进行比较: :vert diffsplit file2
如果没有用vert命令,diffsplit则会分上下两个窗口。
3. 如果已经用split方式打开了两个文件file1,file2,又想比较两文件的不同。
分别在两个窗口里面输入命令: :diffthis
4. 如果更改了某个窗口的内容,vim又没有自动更新diff检查,可以使用如下命令更新: :diffupdate
5. 定位到不同点:
[c 跳到前一个不同点
]c 跳到后一个不同点
6. 在窗口间跳转:
ctrl-w w 跳到下一个窗口
ctrl-w h 跳到左侧窗口
ctrl-w l 跳到右侧窗口
ctrl-w j 跳到下方的窗口
ctrl-w k 跳到上方的窗口
7. 合并文档:
dp 将差异点的当前文档内容应用到另一文档(diff put)
do 将差异点的另一文档的内容拷贝到当前文档(diff get)
8. 上下文的展开和查看
比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以这样设置: :set diffopt=context:3
可以用简单的折叠命令来临时展开被折叠的相同的文本行: zo (folding open, z这个字母看上去比较像折叠的纸)
然后可以用下列命令来重新折叠: zc (folding close)
2. 如果已经打开了文件file1,再打开另一个文件file2进行比较: :vert diffsplit file2
如果没有用vert命令,diffsplit则会分上下两个窗口。
3. 如果已经用split方式打开了两个文件file1,file2,又想比较两文件的不同。
分别在两个窗口里面输入命令: :diffthis
4. 如果更改了某个窗口的内容,vim又没有自动更新diff检查,可以使用如下命令更新: :diffupdate
5. 定位到不同点:
[c 跳到前一个不同点
]c 跳到后一个不同点
6. 在窗口间跳转:
ctrl-w w 跳到下一个窗口
ctrl-w h 跳到左侧窗口
ctrl-w l 跳到右侧窗口
ctrl-w j 跳到下方的窗口
ctrl-w k 跳到上方的窗口
7. 合并文档:
dp 将差异点的当前文档内容应用到另一文档(diff put)
do 将差异点的另一文档的内容拷贝到当前文档(diff get)
8. 上下文的展开和查看
比较和合并文件的时候经常需要结合上下文来确定最终要采取的操作。Vimdiff 缺省是会把不同之处上下各 6 行的文本都显示出来以供参考。其他的相同的文本行被自动折叠。如果希望修改缺省的上下文行数为3行,可以这样设置: :set diffopt=context:3
可以用简单的折叠命令来临时展开被折叠的相同的文本行: zo (folding open, z这个字母看上去比较像折叠的纸)
然后可以用下列命令来重新折叠: zc (folding close)
- 显示16进制的值
一个真正的二进制编辑器用两种方式来显示文本: 二进制和十六进制格式。你可以在 Vim里通过转换程序 "xxd" 来达到这效果。该程序是随 Vim 一起发布的。
首先以二进制方式编辑这个文件: vim -b datafile
现在用 xxd 把这个文件转换成十六进制: :%!xxd
文本看起来像这样:
0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59.
现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。修改了十六进制部分并不导致可打印字符部分的改变,反之亦然。
现在用 xxd 把这个文件转换成十六进制: :%!xxd
文本看起来像这样:
0000000: 1f8b 0808 39d7 173b 0203 7474 002b 4e49 ....9..;..tt.+NI
0000010: 4b2c 8660 eb9c ecac c462 eb94 345e 2e30 K,.`.....b..4^.0
0000020: 373b 2731 0b22 0ca6 c1a2 d669 1035 39d9 7;'1.".....i.59.
现在你可以随心所欲地阅读和编辑这些文本了。 Vim 把这些信息当作普通文本来对待。修改了十六进制部分并不导致可打印字符部分的改变,反之亦然。
最后, 用下面的命令把它转换回来: :%!xxd -r
只有十六进制部分的修改才会被采用。右边可打印文本部分的修改忽略不计。欲知更多详情,参见 xxd 手册。
- 分屏
1. 分屏启动Vim
使用大写的O参数来垂直分屏 vim -On file1 file2 ...
使用小写的o参数来水平分屏 vim -on file1 file2 ...
注释: n是数字,表示分成几个屏。
2.关闭分屏
关闭当前窗口 Ctrl+W c
关闭当前窗口,如果只剩最后一个了,则退出Vim Ctrl+W q
使用小写的o参数来水平分屏 vim -on file1 file2 ...
注释: n是数字,表示分成几个屏。
2.关闭分屏
关闭当前窗口 Ctrl+W c
关闭当前窗口,如果只剩最后一个了,则退出Vim Ctrl+W q
3.分屏
上下分割当前打开的文件 Ctrl+W s
上下分割,并打开一个新的文件 :sp filename
左右分割当前打开的文件 Ctrl+W v
左右分割,并打开一个新的文件 :vsp filename
上下分割当前打开的文件 Ctrl+W s
上下分割,并打开一个新的文件 :sp filename
左右分割当前打开的文件 Ctrl+W v
左右分割,并打开一个新的文件 :vsp filename
4.移动光标
Vi中的光标键是h, j, k, l,要在各个屏间切换,只需要先按一下Ctrl+W
把光标移到右边的屏 Ctrl+W l
把光标移到左边的屏中 Ctrl+W h
把光标移到上边的屏中 Ctrl+W k
把光标移到下边的屏中 Ctrl+W j
把光标移到下一个的屏中 Ctrl+W w
Vi中的光标键是h, j, k, l,要在各个屏间切换,只需要先按一下Ctrl+W
把光标移到右边的屏 Ctrl+W l
把光标移到左边的屏中 Ctrl+W h
把光标移到上边的屏中 Ctrl+W k
把光标移到下边的屏中 Ctrl+W j
把光标移到下一个的屏中 Ctrl+W w
5.移动分屏
这个功能还是使用了Vim的光标键,只不过都是大写。当然了,如果你的分屏很乱很复杂的话,这个功能可能会出现一些非常奇怪的症状。
向右移动 Ctrl+W L
向左移动 Ctrl+W H
向上移动 Ctrl+W K
向下移动 Ctrl+W J
这个功能还是使用了Vim的光标键,只不过都是大写。当然了,如果你的分屏很乱很复杂的话,这个功能可能会出现一些非常奇怪的症状。
向右移动 Ctrl+W L
向左移动 Ctrl+W H
向上移动 Ctrl+W K
向下移动 Ctrl+W J
6.屏幕尺寸
下面是改变尺寸的一些操作,主要是高度,对于宽度你可以使用Ctrl+W <或是>,但这可能需要最新的版本才支持。
让所有的屏都有一样的高度 Ctrl+W =
增加高度 Ctrl+W +
减少高度 Ctrl+W -
- 替换字符串
:s /abc/xxx/ 替换当前行第一个abc为xxx
:s /abc/xxx/g 替换当前行所有的abc为xxx
:m,n s/abc/xxx/ 替换从m行到n行的每一行的第一个abc为xxx
:.,$ s/abc/xxx/g 替换当前行到最后一行的所有的abc为xxx
:s#abc/#xxx/# 替换当前行的第一个abc/为xxx/
:s /abc/xxx/g 替换当前行所有的abc为xxx
:m,n s/abc/xxx/ 替换从m行到n行的每一行的第一个abc为xxx
:.,$ s/abc/xxx/g 替换当前行到最后一行的所有的abc为xxx
:s#abc/#xxx/# 替换当前行的第一个abc/为xxx/
可以使用替换将Windows文本转换为Linux文本:
:1,$s/^M//g (press Ctrl-v, then press Enter to input the ^M character)