VIM简介
vim是从vi发展出来的一个文本编辑器,是一个具有很多命令的功能非常强大的编辑器。
VIM键盘图
VIM模式
基本上vim共分为三种模式,普通模式(Normal Mode)、输入模式(Insert Mode)、命令模式(Command Mode)和可视模式(Visual Mode)。
vim采用模式编辑的理念,即它如上述提供了多种模式,按键在不同的模式下作⽤不同。 可以在普通模式 下浏览⽂件,在插⼊模式下插⼊⽂本, 在可视模式下选择⾏,在命令模式下执⾏命令等等。
这听起来可能很复杂, 但是这有⼀个很⼤的优点:它不需要通过同时按住多个键来完成操作,多数时候只需要依次按下这些按键即可。越常⽤的操作,所需要的按键数量越少。
和模式编辑紧密相连的概念是操作符和动作。操作符指的是开始某个⾏为, 例如:修 改、删除或者选择⽂本,之后你要⽤⼀个动作来指定需要操作的⽂本区域,如:de 会从当前光标位置删除到单词末尾。
vim⾃带⼀个交互式的教程,内含你需要了解的最基础的信息,你可以通过终端运⾏以 下命令打开教程:vimtutor
普通模式
此模式下敲击键盘动作会被vim识别为命令,而非输入字符,比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。
输入模式
在普通模式下按下i 、o、a等就进入了输入模式,在输入模式当中,你可以发现在左下角状态栏中会出现--INSERT--或者--REPLACE--的字样,那就是可以输入任意字符的提示,键盘上除开 Esc,其他的按键都可以作为输入按钮,而使用Esc键可以返回到普通模式。
在输入模式中,常用的按键:
- 字符按键以及Shift组合 -- 输入字符
ENTER
-- 回车键 -- 换行BACK SPACE
-- 退格键,删除光标前一个字符DEL
-- 删除键,删除光标后一个字符- 方向键 -- 在文本中移动光标
HOME/END
-- 移动光标到行首/行尾Page Up/Page Down
-- 上/下翻页Insert
-- 切换光标为输入/替换模式,光标将变成竖线/下划线ESC
-- 退出输入模式,切换到命令模式
命令模式
在普通模式下按下 :(英文冒号)就进入了命令模式,按ESC键可随时退出命令模式。
可视化模式
按如下命令可进入可视化模式、按ESC键可随时退出可视化模式,可视化模式可以分为三种:字符可视化模式(Characterwise visual mode)、行可视化模式(Linewise visual mode)、块可视化模式(Blockwise visual mode)。
v,V
-- 进入的字符可视化模式 ,文本选择是以字符为单位的。V 进入的行可视化模式,文本选择是以行为单位的。[Ctrl]-[V]
进入的块可视化模式,可以选择一个矩形内的文本。
VIM按键说明
许多改变文本的命令都由一个操作符和一个动作构成或者采取计数形式更改更多(operate motion
或者 operate number(数字) motion
)。
如使用删除操作符 d 的删除命令的格式如下:d motion
或者 d number(数字) motion
其中: d - 删除操作符(操作符,代表要做的事,d代表删除);motion - 动作(代表在所操作的文本上的移动,如w代表单词[word],$代表行末等);number - 重复次数(可以附加的数字,代表动作的重复次数)。
特别提示: 对于勇于探索者,请在正常模式下面仅按代表相应操作符的键而不使用动作,代表操作符的字符会同时出现在屏幕的最后一行等待你的输入。
基础命令
x,X
-- 在一行字当中,x 为向后删除一个字符 (相当于 [del] 按键),X为向前删除一个字符(相当于[backspace]亦即是退格键) (常用)p,P
-- 置入类命令,p为将已复制的数据在光标下一行贴上,P则为贴在光标上一行!例如,目前光标在第20行,且已经复制了10行数据。则按下p后,那10行数据会贴在原本的20行之后,亦即由21行开始贴。但如果是按下P,则原本的第20行会被顶到变成30行。 (常用)J
-- 将光标所在行与下一行的数据结合成同一行c
-- 重复删除多个数据,例如向下删除10行,10cju
-- 复原前一个动作。(常用)yy
-- 复制游标所在的那一行(常用)w
-- 从当前光标当前位置直到下一个单词起始处,不包括它的第一个字符。e
-- 从当前光标当前位置直到单词末尾,包括最后一个字符。0
或功能键[Home]
-- 这是数字0:移动到这一行的最前面字符处 (常用)$
或功能键[End]
-- 移动到这一行的最后面字符处(常用)
移动光标
h
或向左箭头键(←) -- 光标向左移动一个字符j
或向下箭头键(↓) -- 光标向下移动一个字符k
或向上箭头键(↑) -- 光标向上移动一个字符l
或向右箭头键(→) -- 光标向右移动一个字符 (备注:h的键位于左边,每次按下就会向左移动,l的键位于右边,每次按下就会向右移动,j 键看起来很像一支尖端方向朝下的箭头。)[Ctrl] + [f]
-- 屏幕『向下』移动一页,相当于[Page Down]
按键 (常用)[Ctrl] + [b]
-- 屏幕『向上』移动一页,相当于[Page Up]
按键 (常用)[Ctrl] + [d]
-- 屏幕『向下』移动半页[Ctrl] + [u]
-- 屏幕『向上』移动半页[+]
-- 光标移动到非空格符的下一行[-]
-- 光标移动到非空格符的上一行H
-- 光标移动到这个屏幕的最上方那一行的第一个字符M
-- 光标移动到这个屏幕的中央那一行的第一个字符L
-- 光标移动到这个屏幕的最下方那一行的第一个字符G
-- 移动到这个档案的最后一行(常用)gg
-- 移动到第一行,相当于1G! (常用)[Ctrl]-[W]
-- 可以使您在窗口之间跳转,[:q]
<回车> 可以关闭窗口j$
-- 将光标移动到下一行末尾nG
-- n 为数字。移动到第n行。例如20G则会移动到第20行(可配合 :set nu)n[Space]
-- n表示『数字』,例如 20 。数字+按空格键,光标会向右移动这一行的n个字符。例如 20 则光标会向后面移动20个字符距离。n[Enter>]
-- n为数字。光标向下移动n行(常用)
编辑、搜索与替换
i,I
-- 进入输入模式(Insert mode):i 为从目前光标所在处输入,I为在目前所在行的第一个非空格符处开始输入。 (常用)a,A
-- 进入输入模式(Insert mode):a为从目前光标所在的下一个字符处开始输入,A为从光标所在行的最后一个字符处开始输入。(常用)o,O
-- 进入输入模式(Insert mode):英文字母o的大小写。o为在目前光标所在的下一行处输入新的一行;O为在目前光标所在的上一行处输入新的一行。(常用)r,R
-- 进入替换状态也即是输入模式(Insert mode):r只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下 ESC 为止;(常用)ce
-- 替换一个单词从当前光标当前位置直到单词末尾的字符cw
-- 替换一个单词从当前光标当前位置直到下一个单词起始处的字符c$
-- 替换从当前光标当前位置直到行末的字符%
-- 输入 % 可以查找配对的括号 )、]、},如光标停在任意 (、[ 或 {处,接着按%字符,光标会在配对的括号处,再按%可回到第一个括号处。/
字符串 -- 输入[/]加上一个字符串可以用以在当前文件中向光标之下查找该字符串。例如要搜寻vbird这个字符串,就输入[/vbird]即可。(常用)?
字符串 -- 输入[?]加上一个字符串可以用以在当前文件中向光标之上查找该字符串。n,N
-- n是英文按键。代表重复前一个搜寻的动作。例如,执行/vbird去向下搜寻vbird这个字符串,则按下n后,会向下继续搜寻下一个名称为vbird的字符串。如果执行?vbird的话,那么按下 n则会向上继续搜寻名称为vbird的字符串。N 是英文按键。与n刚好相反,为反向进行前一个搜寻动作。例如/vbird 后,按下 N 则表示向上搜寻vbird[CTRL]-[O]
-- 带您跳转回较旧的字符串的搜索位置,[CTRL]-[I]
-- 则带您到较新的字符串的搜索位置s/old/new/g
-- 可替换整行的old为new#,#s/old/new/g
-- #,# 代表的是替换操作的若干行中,首尾两行的行号,行间的所有字符串替换old为new。%s/old/new/g
或1,$s/old/new/g
-- 则是替换整个文件中的每个匹配串old为new。%s/old/new/gc
或者1,$s/old/new/gc
-- 会找到整个文件中的每个匹配串,并且对每个匹配串old替换为new进行提示,确认是否进行替换。cne
-- n为数字,替换n个单词从当前光标当前位置直到单词末尾的字符cnw
-- n为数字,替换n个单词从当前光标当前位置直到下一个单词起始处的字符
上面这些按键中,在 vi 画面的左下角处会出现[--INSERT--]或[--REPLACE--]的字样。 由名称就知道该动作了吧!!特别注意的是,想要在档案里面输入字符时, 一定要在左下角处看到 INSERT 或 REPLACE 才能输入![Esc] 退出输入模式,回到普通模式中(常用)
删除、复制与粘贴
nx
-- n为数字,连续向后删除n个字符。举例来说,我要连续删除10个字符,10x。dd
-- 剪切游标所在的那一整行(常用),用 p/P 可以粘贴。ndd
-- n为数字。剪切光标所在的向下 n 行,例如20dd则是剪切20行(常用),用p/P可以粘贴。d1G
-- 删除光标所在到第一行的所有数据dG
-- 删除光标所在到最后一行的所有数据de
-- 会从当前光标位置删除到单词末尾dne
-- n为数字,会从当前光标位置删除n个单词,到最后个单词末尾dw
-- 会从当前光标位置删除到下一个单词起始处dnw
-- n为数字,会从当前光标位置删除n个单词,到最后个单词的下一个单词起始处d$
-- 删除游标所在处,到该行的最后一个字符d0
-- 那个是数字的0,删除游标所在处,到该行的最前面一个字符nyy
-- n为数字。复制光标所在的向下n行,例如20yy则是复制20行(常用)y1G
-- 复制游标所在行到第一行的所有数据yG
-- 复制游标所在行到最后一行的所有数据y$
-- 复制光标所在的那个字符到该行行尾的所有数据y0
-- 复制光标所在的那个字符到该行行首的所有数据[Ctrl]+[r]
-- 重做上一个动作。(常用)(备注:u与[Ctrl]+r是很常用的指令!一个是复原,另一个则是重做一次。[.]
-- 小数点!意思是重复前一个动作的意思。 如果你想要重复删除、重复贴上等等动作,按下小数点[.]就好了! (常用)
命令模式可用按键
:w
-- 将编辑的数据写入硬盘档案中(常用):w!
-- 若文件属性为[只读]时,强制写入该档案。不过,到底能不能写入, 还是跟你对该档案的档案权限有关啊!:q
-- 离开 vi (常用):q!
-- 若曾修改过档案,又不想储存,使用!为强制离开不储存档案。注意,惊叹号(!)在vi当中,常常具有[强制]的意思:wq
-- 储存后离开,若为:wq!则为强制储存后离开 (常用)ZZ
-- 大写的Z!如果修改过,保存当前文件,然后退出!效果等同于(保存并退出)ZQ
-- 不保存,强制退出。效果等同于 :q!。:w [filename]
-- 将编辑的数据储存成另一个文件(类似另存新档):n1,n2 w [filename]
-- 将 n1 到 n2 的内容储存成[filename]这个文件。v motion :w FILENAME
-- 可将当前编辑文件中可视模式下选中的内容保存到文件FILENAME 中:r [filename]
-- 在编辑的数据中,读入另一个文件的数据。亦即将[filename]这个文件内容加到光标所在行后面:! command
-- 暂时离开vim到指令行模式下执行command的显示结果!例如:[!ls /home]即可在vim当中查看/home底下以ls输出的文件信息:r !command
-- 可以读取command命令的输出并将其放置到当前文件的光标位置后面
VIM环境的信息
输入:set xxx 可以设置 xxx 选项,在选项前加上 no 可以关闭选项,如:set noic。 一些有用的选项如下
:set nu
-- 显示行号,设定之后,会在每一行的前缀显示该行的行号:set nonu
-- 与 set nu 相反,为取消行号!:set hls
-- 'hls','hlsearch',高亮显示所有的匹配短语:set is
-- 'is'即'incsearch',查找短语时显示部分匹配:set ic
-- 'ic'即'ignorecase',查找时忽略字母大小写CTRL-G
-- 在当前编辑文件中的页面最底部显示当前光标所在行位置以及文件状态信息
在线帮助信息
vim 拥有一个细致全面的在线帮助系统。要启动该帮助系统,请选择如下三种方法之一:
- 按下
<HELP>
键 (如果键盘上有的话) - 按下
<F1>
键 (如果键盘上有的话) - 输入 :
help <回车>