admin管理员组文章数量:1122850
vim -h 显示所有命令行参数
三级只读模式,越来越严
vim -R readme.txt 以只读模式打开(之后的所有写操作都必须强制!)
vim -m 只有:set write 之后才可以保存。
vim -M 最严的只读,无论如何都不允许写。
----- 关于十六进制 -----
十六进制模式下的编辑非常复杂,极易出错。
现根据两种常见使用场景,总结出如下指导,务必严格遵守:
1. 文件本身就是纯二进制的。
打开文件时使用-b参数,以二进制模式编辑。
进入vim后,使用:%!xxd进入十六进制模式。
每次保存之前,必须退出十六进制模式(:%!xxd -r)。
增删改,这三种常见操作,在十六进制模式时,最好只使用第三种:改。
如果非要增删,先退出十六进制模式,加入同样个数的点位字符,然后进入十六进制模式修改。虽然看着麻烦,但其实是简单、不易出错的。
如果非要在十六进制模式下增删,要注意,xxd把整个屏幕分成三个区:左边地址区,中间数值区,右边ASCII预览区。你的修改要兼顾三个区!保证地址正确,保证有效字节不被挤到预览区。
总而言之一句话:保证地址区和数值区的格式正确(预览区乱写一气不会有事)。这样,xxd程序才能识别。
2. 文件本身是文本文件。
这种情况多是要处理文本中少数的乱码。
打开文件时,要用-b参数。不要在vim里:se bin(aka. set binary)临时改。改着改着会记乱的。
其它的参照上面的指示。
附常用命令:
:%!xxd 切换到十六进制模式。
想要保存时,必须先回到文本模式,然后再w。
如果在十六进制模式按了w保存,那么你保存的实际是屏幕上的所有文本(地址、数值,ASCII预览)。
:%!xxd -r 回到文本模式
在文本模式下,如果有类似^A^B...^M这样的符号,是不可打印字符。
使用:set display=uhex(简写为:se dy=uhex) 可以将它们显示成ASCII码<0a>这样子。
可用:setlocal 只影响当前文件。
可使用 :se(t) dy 来查询当前display的设置。
----- 关于帮助 -----
在vim里,随时可用:help <subject> 查询帮助。
带大括号的标签可以跳转,使用快捷键Ctrl-],如{command}
跳回来:Ctrl-T 或 Ctrl-O
跳到下一屏:Ctrl-D (Downward Scroll)
跳回上一屏:Ctlr-U (Upperward Scroll)
跳到下一页:Ctrl-F (Forward)
跳回上一页:Ctrl-B (Backwardr)
----- 替换 -----
即 s 命令的各种使用场景
:s/fox/cat 当前行,第一个FOX替换成CAT
:s/fox/cat/g 当前行,所有FOX都替换
:3,6s/fox/cat 第3行到第6行,第一个FOX
:3,6s/fox/cat/g 第3行到第6行,都替换
:3,$s/fox/cat 第3行到文本的末尾
:.,6s/fox/cat 当前行到第6行
:s#fox/#cat// 当前行的fox/替换为cat//(用#作为分隔符)
:%s/fox/cat 每一行,第一个FOX替换为CAT
:%s/fox/cat/c 末尾的C表示CONFIRM,替换前确认
:s/\<fox\>/cat/ 匹配FOX这个单词(用<和>匹配单词的首尾)
:s/\r\n/cat/ 回车换行
替换不可见字符或乱码的步骤略复杂:
1. 光标移到字符上,打ga键,显示其十六进制码。
2.
若是单字节 :%s/\%xYY/substitute/g
若是多字节 :%s/\%uYYYY/substitute/g
----- 删除 -----
从当前行向下,删除100行 100dd
从当前行向下,删除100行 d99j j和k就是方向键
从当前行向上,删除100行 d99k
从当前行向上,删除2行 dk
从第2行删到第100行 :2,100d
从当前行向下,删除100行 :.,.+99d .是当前行(序号0),.+99是第100行(序号99)
从第3行到最后,全删 :3,$d
----- 跳转 -----
gg 跳到开头
12gg 跳到第12行
12G 跳到第12行
G 跳到末尾
3后回车 向下跳3行
3j 向下跳3行
3k 向上跳3行
e 跳到单词尾
w 跳到单词头
b 向前跳,到单词头
0 跳到当前行的行首
^ 跳到当前行的第一个字符
$ 跳到当前行的末尾
HML 跳到“屏幕内容”的始、中、终
)( 跳到下(上)一句子
}{ 跳到下(上)一段落
'' (两个单引号)跳回上个位置
| 跳到第1列
14| 跳到第14列
----- 当前行,移动 -----
:m 12 移到第12行
:m 0 移到第1行的前面
:m $ 移到最后一行
:m .+1 和下一行互换
:m .-2 和上一行互换(注意是2)
:2,4m $ 第2到4行移到最后
:.,.+4m $ 当前5行移到最后
:,+4m$ 和上面一样,简写了,省略了当前行与空格
----- 文件编码转换 -----
:set fenc=utf-8 把文件转码为utf-8。(转入二进制模式可看到,现在文件有BOM:efbbbf)
:set fenc=utf-16le 把文件转码为utf-16。此时文件会有BOM:fffe。
:help enc 或 :help fenc 查看支持的编码
----- 搜索 -----
/[\x80-\xff] 搜索不可见字符80-ff。
----- 比较文件内容 -----
比较两个文本文件,要确保二者的编码一样。
vim -d a.txt b.txt
有差异的行,会用特殊的颜色标出来。
比较两个二进制文件,如果是粗略地比较,用cmp命令行工具比较好。
cmp a.bin b.bin
直接告诉你文件是否一样。
cmp a.bin b.bin -l
-l 会详细列出第几个字节,各自的值是多少。
在vim下比较二进制文件步骤多:
1. 打开两个文件,并列显示。
2. 使用:windo %!xxd 使两个窗口都进入十六进制模式
3. 使用:windo diffthis比较两个窗口(buffer)的内容
4. 当文件内容改变时,用:diffupdate重新比较(本来vim会自动更新比较,但不准确,所以需要手动重新比较)
5. 在浏览文件时,两个窗口会同时卷动
6. 想离开比较模式::windo diffoff
7. 想退出vim::windo q!
----- 同时编辑两个文件 -----
vim a.bin b.bin -o -o 意为:open new window
即每个文件各有一个窗口。
ctrl-w、ctrl-w在两个窗口间跳转。
或者:
vim a.bin 打开第一个文件,进入vim环境
:split b.bin 打开第二个。两个窗口横向平行
VIM既有上面说的窗口模式,还有分页模式:
:tabedit {filename} 创建新文件,打开到新的一页
:tabnext
:tabprevious 在分页之间跳转
:tabclose 分页关闭
:tabdo {cmd} 在所有分页执行命令
----- 复制粘贴 -----
在visual模式比较直观。
1. 先把光标停在你想复制的起始位置
2. 按v进入可视模式(V可选择整行,或者按Ctrl-v进入“块模式”)
3. 使用光标移动命令,标示复制区域的结束位置
4. 使用y命令复制,或d命令剪切。然后vim自动退回到normal模式
5. 使用p命令粘贴。
版权声明:本文标题:[速查] VIM常用法 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1724510462a890413.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论