vim的使用
基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode):
启动vim随即进入命令行模式 等同于按Esc键;
命令行模式(Command mode)
切换到输入模式
i
切换到输入模式,修改位置为光标所在位置,即在光标处开始插入字符!!!
a
切换到输入模式,修改位置为光标下一位置,光标自动往下一个字符。
I
切换到输入模式,调到某一行行首。
A
切换到输入模式,调到某一行行末。
以下均是在Esc模式下
查找
/find
向下查找。小技巧:在炒鸡炒鸡长的一行里,方便鼠标定位,按i
即可修改,不用一个一个字符滑动
?find
向上查找。
n
代表重复前一个搜寻动作,比如/find
搭配n
向下查找下一个。或者用上箭头+enter
。
N
代表『反向』进行前一个搜寻动作。,比如/find
搭配N
向上查找下一个。
字符的删除
x
等同于delete键
10x
连续向后删除 10 个字符。
X
等同于backspace键
行的复制和删除
yy
复制当前行;结合 p
粘贴所复制的行数! eg:2yy 然后 p **
dd
删除当前行;结合p
粘贴所删除的行数!eg:2dd 然后 p** 个人喜欢这么用,因为不用动鼠标拷贴
!!!
yy
搭配p
搭配.
重复粘贴该行;
dd
搭配p
搭配.
重复删除光标所在行;
替换
:%s/before/after/
vi里的替换操作(底层命令行模式),也可用sed -i 's/before/after/' file
(一不小心替换错了,尴尬,所以最好不要用-i在原文件上操作)实现;末尾加g
表示一行内全部替换。!!!
r
按完后毫无反应,但是却可以实现替换光标所在字符。
R
按R后下方出现-- REPLACE --
显示当前不是插入模式,是replace模式。Esc可退出
``
撤销和重复
u
替换错了怎么办??用u
撤销,可多次使用。!!!
ctrl+r
退回,比如我不小心按到u
了。
.
重复删除或者复制
保存和退出
:wq
&& wq!
保存和强制保存/覆盖!!!
:q
&& :q!
退出和强制退出!!!
:w new_file_name
简言之另存为,可保留源文件。方便我忘记复制,在原流程里改数据,嘎嘎
!!!
行的编号
:set nu
或者:set number
撤销使用:set number
。!!!
:set paste
VS set nopaste
输入模式(Insert mode)
一般大家都会在环境设置里设置自动tab,方便写程序。
配置.vimrc
比如我的.vimrc里:
set showmatch " auto match ()
set smartindent " auto tab
坏处就是在你从另一个文档里粘贴一段代码到当前vi文本里时,自动tab就会在你原有模块的基础上,继续补加tab,然后你就看到了好好的文本变歪了。所以我最喜欢在Esc模式下用set paste
清除自动补加tab功能,然后用set nopaste
还原。