- vi是”visual interface”的简称, 它在Linux上的地位就仿佛Windows中的记事本一样. 它可以执行编辑、删除、查找、替换、块操作等众多文本操作, 而且用户可以根据自己的需要对其进行定制。本体非常简洁,但可扩展性非常的高。
- vi是一个文本编辑程序, 没有菜单, 只有命令,vim更高级一些, 可以理解是vi的高级版本。
- vim有时候需要自行安装, 在shell中输入vimtutor命令可以查看相关的帮助文档。
- 推荐使用这个小游戏来熟悉vim基础操作:https://vim-adventures.com/
-
命令模式:使用VIM编辑器时,默认处于命令模式。在该模式下可以移动光标位置,可以通过快捷键对文件内容进行复制、粘贴、删除等操作。
-
末行模式:在命令模式下输入冒号:即可进入末行模式,可以在末行输入命令来对文件进行查找、替换、保存、退出等操作。
-
编辑模式:在命令模式下输入冒号:即可进入末行模式,可以在末行输入命令来对文件进行查找、替换、保存、退出等操作。
-
进入vim:直接输
vim
,或者vim+要打开的文件
,或者vim+要创建的文件
vim 的命令很多都有两部分组成:操作和动作,
- 操作是用于对文本内容进行操作的命令,比如:
y
复制、d
剪切、c
替换插入,=
自动缩进 - 动作是指移动光标的命令,用来限定范围,等 比如:数字、
hjkl
上下左右,w/e/b
单词移动,f
查找移动 - 查看操作符:
:h operator
,查看动作::h motion
、:h motion.txt
整体命令
-
以行为单位操作的语法:
[数字] + 操作符 + [数字] + 操作符
,用数字来控制该操作符能操作的范围,d2d
删除两行,4c2c
替换8行,等价于c8c
、8cc
- 前后两个操作符一样。
- 第一个数字表示执行"操作符 + 数字 + 操作符"的次数,默认为1。
- 第二个数字为从当前行开始,向下操作的行数(包括当前行),默认为1
-
操作符和动作的语法``[数字] + operator + [数字] + motion
、
[数字] + operator + [数字] + operator` -
操作符结合文本对象语法:
[数字] + operator + [数字] + text-object
-
按完操作再按动作,表示对动作范围内执行操作,如
c8l
表示替换后面8个字符(先数字再字母)。 -
按两下动作表示对一行执行操作,比如
dd
剪切一行,cc
更改一行,yy
复制一行 -
数字加按键组合也好用,
3o
在下面插入3空行、8h
向左移8位
下面是一些具体的操作方式:
ZZ
(大写):保存退出gg
=G
:代码格式化- 光标移动:
h
左j
下k
上l
右,可以和数字搭配,4h
就是左4格。w
移动到一个单词开头,e
移动到单词结尾,b
移动到前一个单词开头,4w
就是移动四个单词gg
光标移动到文件开头,G
文件末尾0
光标移动到行首,$
行尾nG
行跳转,如12G为移动到12行f+字母
将光标移动到最近的对应字母ctrl + u
:向下翻半屏(up)--光标向上移动ctrl + d
:向上翻半屏(down)--光标向下移动
- 复制粘贴
- 复制:用
y
(yank)与其它键组合;yaw
复制一个单词;yy
:复制当前行;y4j
复制当前行在内的下4行内容;nyy
:复制n行,yi“
赋值引号内所有内容(字符串) - 粘贴:
大P
:在光标所在位置向下新开辟一行, 粘贴 ;小p
:下 - 剪切:
dd
、ndd
- 复制:用
- 删除命令
小x
:删除光标后一个字符,相当于Delete大X
:删除光标前一个字符,相当于Backspacedw
:删除光标开始位置的字符,包含光标所在字符d0
:删除光标前本行所有内容,不包含光标所在字符dd
:剪切一行ndd
:剪切当前行向下多行v/ctrl+v
:使用h、j、k、l移动选择内容, 然后按d删除其中ctrl+v是列模式, v为非列模式
- 撤销
u
,反撤销Ctrl + r
- 替换
r
:替换当前字符R
:替换当前行光标后的字符
- 查找
/xxxx
:从光标所在的位置开始搜索,按n向下搜索,按N向上搜索?xxxx
:从光标所在的位置开始搜索, 按n向上搜索, 按N向下搜索#
:将光标移动到待搜索的字符串上, 然后按n向上搜索,但N向下搜索shift+k
:在待搜索的字符串上按shift+k或者K, 可以查看相关的帮助文档
- 可视模式:
v
进入,移动光标就会选中内容 - 切换到文本模式
小i
:(insert) 光标前插入;小a
:(append) 光标后插入大I
:光标行行首插入;大A
:光标行行尾插入小o
:光标前插入一行;大O
:光标后插入一行c
:change改变,删除原有内容并进入写入模式,cc
改变一行,光标在单词开头时caw
改变一个单词,光标在词中时ciw
改变一个单词,ci“
可以改变引号内所有内容(字符串)
- 在命令行模式输入冒号
:
进入末行模式,末行模式按下两次ESC回到命令模式 - 保存退出
q
:退出q!
:强制退出不保存w
:保存,不退出wq
/x
:保存退出
- 替换操作
:s/old/new/
:光标所在行的第一个old替换为new:s/old/new/g
:光标所在行的所有old替换为new:m, ns/old/new/g
:将第m行至第n行之间的old全部替换成new:%s/old/new/g
:当前文件的所有old替换为new:1,$s/old/new/g
:当前文件的所有old替换为new:%s/old/new/gc
:同上,但是每次替换需要用户确认
- 快速翻屏
ctrl + u
:向下翻半屏(up)--光标向上移动ctrl + d
:向上翻半屏(down)--光标向下移动ctrl + f
:向上翻一屏(front)ctrl + b
:向后翻一屏(back)
- 末行模式下执行shell命令:
!shell
- 分屏操作
sp
:当前文件水平分屏;vsp
:当前文件垂直分屏;sp 文件名
:当前文件和另一个文件水平分屏;vsp 文件名
:竖直分屏new
创建新文件并打开ctrl-w-w
:在多个窗口切换光标wall
/wqall
/xall
/qall
/qall!
:保存/保存退出/保存退出/退出/强制退出分屏窗口- 在文件打开前分屏:
vim -on file1 file2 …
,n可以省略, 有几个文件就分几屏- 垂直分屏:
vim -On file1 file2…
用户配置文件:
~/.vimrc
:修改用户级别的配置文件只会影响当前用户, 不会影响其他的用户系统配置文件:
/etc/vim/vimrc
:修改了系统级别的配置文件将影响系统下的所有用户,建议只在用户级别的配置文件下进行修改
- 进入家目录
~
cd
- 新建文件夹
.vim
,可能文件已经存在,.
开头的是隐藏文件,ls
命令想看到得加-a
mkdir .vim
- 进入
.vim
,用vim新建或进入vim配置文件vimrc
cd .vim
vim vimrc
进入配置文件,一行行写配置就好。记住:小o
命令快速在下面插入一行,大O
在上面插入一行
- 改键位:
noremap 新键 旧键
或map 新键 旧键
map R :source $MYVIMRC<CR>
:表示输入命令,
表示回车,之后在vimrc文件内,保存后每次按
shift+r`就可应用配置。map s <nop>
:将s
设置为没有功能,防止误删map S :w<CR>
:大S
设置为保存,以后写完之后,Esc
回到命令模式,再shift+s
就能保存。- ``map Q :q
:
大Q`设置为退出
- 语法高亮:
syntax on
- 行号:
set number
普通行号,set relativenumber
设置相对行号,相对行号特别实用,方便用命令快速跳转。 - 在当前光标所在行显示一条线:
set cursorline
,有些配色方案下这条线会很好看。 - 字不会超出当前显示范围:
set wrap
- 显示命令:
set showcmd
- 选项补全菜单:
set wildmenu
,末行模式输入命令按tab补全时会提供菜单供选择,Tab
在选项间切换 - 搜索时忽略大小写:
set ignorecase
,智能大小写:set smartcase
- 文件打开是执行命令:exec “命令”,开始时不显示上一次搜索时的高亮:
exec “nohlsearch”
末行模式下直接改系统配色:color
再Tab
选配色方案,回到默认用color default
,系统配色可能有点丑,还是用插件比较好