vi/vim
打开文件
vim [option] .... file....
+#
直接定位到第#行+/pattern
打开文件后,直接定位到第一个匹配到patter的地方-b
以二进制方式打开文件-d file1 file2
对比打开多个文件-m file
只读方式打开文件-e
直接以末行模式打开
打开文件会生成一个.file_name.swp
隐藏文件。
模式
- 命令模式:可以光标,可以粘贴、复制文本,默认模式
- 插入模式或者编辑模式(INSERT):可以修改文本
- 末行模式(扩展命令模式):保存、退出等等
- esc 退出当前的模式
模式之间切换
命令模式- 插入模式
i 光标所在处插入
I 在当前光标所在的行的行首插入
a 光标所在位置的后面插入
A 在当前光标所在的行尾插入
o 在当前光标所在的行的下一行(新开)插入
O 在当前光标所在的行的上一行(新开一行)插入
插入模式- 命令模式
- esc
命令模式 -- 末行模式
- :
末行模式 -- 命令模式
- esc
- enter
关闭文件
末行模式
- :w 保存
- :q 退出
- :wq 保存并退出
- :q! 强制退出
- :wq!强制保存退出
- :x 保存并退出
- r file 读入file文件
- w file 另存为file
- !command 直接执行命令,如
!whoami
、!pwd
- r!command 直接把命令的结果写到文件中
命令模式
- ZZ 保存退出
- ZQ 不保存退出
命令模式跳转
- 字符之间跳转
- l 向右
- h 向左
- k 向上
- j 向下
- 单词间跳转
- w 下一次的单词的词首
- e 当前词的词尾或者下一个单词的词尾
- b 当前词的词首或者上一词的词首
- #command 直接跳转#个单词,command可以是w/e/b
- 页面间跳转
- H 页首
- L 页尾
- M 页中
- zt 将光标所在行移动到屏幕的顶端
- zb 将光标所在行移动到屏幕的底部
- zz 将光标所在行移动到屏幕的中间
- 行首行尾之间跳转
- ^ 跳转到当前光标所在行的第一个非空字符
- 0(数字) 跳转到行首
- $ 跳转到行尾
- 行间移动
- #G 跳转到第#行
- 在命令扩展模式下,直接`:#`跳转到对应#的行
- G 直接到最后一行
- gg 跳转到第一行,同1G
- 段落之间跳转(跳转至段落之间的空行开头处,有空行才算段落)
- { 上一段
- } 下一段
- 翻屏
- ctrl+f 向文件尾部翻一屏
- ctrl+b 向文件首部翻一屏
- ctrl+d 向文件尾部翻半屏
- ctrl+u 向文件首部翻半屏
命令模式编辑
字符编辑
- x 删除光标所在处的字符
- #x 删除#个字符
- xp 将光标所在处的字符和后面的字符互换位置
- ~ 将光标所在的位置大小写互换
- J 用空格替换当前行的换行符
替换
- r 替换当前光标所在处的字符
- R 进入替换模式(REPLACE)
删除
d
删除,需要跟字符跳转结合d$
删除到行尾,删除当前位置d0
删除到行首,当前位置不删除d^
删除到非空字符dw
删除一个单词de
向后删除一个单词db
向前删除一个单词dd
删除正行#dd
删除#行dG
删除到结尾dgg
删除到开头D
相当于d$
复制
y
也可以跟字符跳转结合y$
y0
y^
yw
ye
yb
yy
复制一正行#yy
复制#行yG
复制到结尾ygg
复制到开头Y
复制整行
粘贴
- p(小写) 如果是整行的话,则粘贴到当前光标所在行的下一行,否则粘贴到光标的后面
- P(大写) 如果是整行的话,则粘贴到当前光标所在行的上一行,否则粘贴到光标的前面
改变
删除以后并将模式切换成插入模式
- c 可以跟光标的跳转做结合
c$
- c0
- c^
- cw
- ce
- cb
#command
- cc 删除正行并插入
- C 相当于
c$
#[i|I|a|A|o|O]string esc
将string粘贴#次
搜索
- /pattern 从当前光标往下搜索
- ?pattern 从当前光标往上搜索
- n 同命令相同的方向
- N 同命令相反的方向
撤销
- u 撤销最近的修改
#u
撤销最近的#次修改- ctrl+r 撤销之前的撤销动作
.
重复最后一次操作#.
最后一次操作重复执行#次
可视化
- v 面向字符()
- V 面向行的(VISUAL LINE)
- ctrl +v 面向块(VISUAL BLOCK)
- 可以结合所有的跳转键进行结合
- 对突出显示部分可以使用删除(d)、复制(y)、变更(c)、过滤、替换、另存为等等
扩展命令模式
地址定界
:start,end 如:
1,3d
删除1-3行。# 具体到第#行
#,# 第#行到第#行
#,+n 从第#开始,到第#+n行结束 1,+2 ==>1,3
.
表示当前光标所在的行$
表示最后一行$-1
表示倒数第二行% 表示全文
/pat1/,/pat2/
从第一个pat1匹配到的地方,到pat2第一次匹配到的地方。用正则写匹配。#,/pat/
从第#行开始,到第一次被pat匹配到的地方/pat/,$
从第一次被pat匹配到的到结尾
可以一起使用的命令
- d
- y
- w file 重新另存为文件
- r file 将文件的内容写到匹配到的下一行
查找并替换
- 要使用地址定界来定义找查内容查找,并使用s进入查找并替换
- 格式:地址定界s/要查找的内容/要替换的内容/装饰器
- 要查找的内容可以使用正则
- 替换的内容不能为正则,但可以为分组。
- 如:%s/(nfs.*)/#1/ ,括号需要进行转义。表示将能与nfs.*匹配的内容前加#。
- 1 表示第一个分组内的内容。以此类推2、3等等
- & 可以代表前面匹配到的内容。如%s/nfs.*/#&/,与上一例子相同。
- 装饰器
- i 忽略大小写
- g 表示全部替换
- gc 每一次替换之前都要询问是否替换
- 分隔符不止可以用
/
还可以使用@
或#
打开多个文件
vim file1 file2 file3 …
,打开后进入扩展命令模式:
:next 下一个
:prev 上一个
:first 第一个
:last 最后一个
:qall 退出全部
:wall 保存全部
:wqall 保存并退出全部
:xall 保存并退出全部
多个窗口打开多个文件
vim -o file1 file2 …
水平分隔
vim -O file1 file2 …
垂直分隔
切换:ctrl+w+上下左右箭头
单文件切割
ctrl+w,s 水平切割
ctrl+w,v 垂直切割
ctrl+w,q 取消相邻的窗口
ctrl+w,o 取消全部窗口
vim工作特性
配置文件
- 全局有效:/etc/vimrc
- 对当前用户有效,在当前用户的根目录新建:
vi ~/.vimrc
命令扩展模式
- 行号:
set nu
取消set nonu
- 忽略大小写(搜索)
set ic
取消set noic
- 自动缩进(同上一行)
set ai
取消set noai
- 设置高亮显示(搜索到的内容)
set hls
取消set nohls
- 语法高亮
syntax on
取消syntax off
- 文件格式
- windows格式 set fileformat=dos
- unix格式 set fileformat=unix
- 从windows与linux之间互传文件需要修改文件格式。
- 添加标识线:
set cul
取消标识线set nocul
- 获取帮助:
set all
- 获取帮助信息:
- :help
- :help topic
- vimtutor