vim 的优势与应用场景
vim 的优势在于纯粹的编辑及 Linux 自带与命令行的完美集成。如果只能 ssh 到服务器进行操作,那么这种情况就只能使用 vim 了。vim 也是最为强大的通用文本编辑器之一,对于需要编辑不同文本的情景,vim 也是相当有优势的。所以,熟练掌握一下 vim 的基本使用还是很有必要的。
vim 是在 vi 基础上加很多新特征发展而来,gvim 则给 vim 加上了图形前端。如果在 Windows 下使用 vim,可以直接安装最新的 gvim。
- Linux 中一般在用户 home 目录建一个 .vimrc 文件进行修改。而不是去修改 /etc/vim 目录下的全局配置,影响所有用户。
- Windows 中 vimrc 位于 C:\Program Files (x86)\Vim 目录下,名字是 _vimrc, 如果按装了 everything ,则直接搜索 vimrc 一步就可定位。
vim 的配置文件 vimrc
"-----------------------------------------------------------------------------------
:imap ii <Esc> " 按键映射 <ESC> -> ii
"外观
colorscheme evening " 配置颜色主题
set guifont=Consolas:h12 " 设置字体和大小
set number " 显示行号
set guioptions-=T " 隐藏工具栏
set ruler " 打开状态栏标尺
set cursorline " 突出显示当前行
set syntax=on " 语法高亮
set showmatch " 高亮显示匹配的括号
set matchtime=3 " 匹配括号高亮的时间(单位:0.1s)
set scrolloff=10 " 光标到屏幕底端保留 10 行 (光标位于屏底看着很不舒服的)
set lines=35 columns=118 " 启动时的大小
:winpos 177 51 " 启动时的位置
"搜索
set ignorecase smartcase " 搜索忽略大小写,但有大写字母时仍保持大小写敏感
set hlsearch " 高亮搜索
set incsearch " 增量式搜索,逐字符高亮
"操作
set clipboard+=unnamed " 共享剪切板
set showcmd " 输入的命令显示出来
set iskeyword+=_,$,@,%,#,- " 带有如下符号的单词不要被换行分割
set noexpandtab " 不用空格代替Tab (makefile是会经常用Tab的)
set tabstop=4 " Tab 键的宽度
set shiftwidth=4 " 行交错宽度
set mouse=a " 鼠标可用
set autoindent " 继承前一行的缩进方式,特别适用于多行注释
"备份
set confirm " 未保存或者只读时,弹出确认
set nobackup " 不生成备份文件
setlocal noswapfile " 不生成 swap 文件
set bufhidden=hide " 当 buffer 被丢弃的时候隐藏
set noerrorbells " 不发出警告声
"解码
set fenc=utf-8
set fencs=utf-8,usc-bom,euc-jp,gb18030,gbk,gb2312,cp936
vim 的常用命令
# 效率
. # 重复最近的文本操作
# 文件
:q # 退出 q->quit
:w # 保存 w->write
:q! # 强制退出不保存
:wq # 保存后退出
ZZ # 保存后退出,同 :wq
# 光标移动
hjkl # 最基本的左下上右,移动一个字符
zz # 光标做在行移动到屏幕中间
w # 向前移动一个单词,光标停在单词首部
b # 向后移动一个单词, 光标停在单词首部
e # 同 w, 光标停在单词尾部
ge # 同 b, 光标停在单词尾部
0 # 本行第一个字符 (同 <HOME> 键)
^ # 本行第一个非空白字符
$ # 移动到行尾 (同 <END> 键)
gg # 移动到文件头
G # 移动到文件尾
:n # 跳转到第 n 行
fx # 移动到光标后第一个为 x 的字符 find
Fx # 同 f,反向移
Ctrl+d # 向下滚动半屏
Ctrl+u # 向上滚动半屏
Ctrl+f # 向下滚动半屏
Ctrl+b # 向上滚动半屏
% # 跳转到配对的括号 (常用)
( # 移动到当前句子开始
) # 移动到下一句子开始
H # 移动页面顶部 H->High
M # 移动页面中部 M->Middle
L # 移动页面底部 L->Low
# 查找
/test # 查找 text ,(记得用正则表达式), 然后 n 向下, N 向上 n->next
?test # 查找 text ,反向
* # 向下查找和光标所在单词一样的词
# # 向上查找和光标所在单词一样的词
:nohlsearch # 关闭当前高亮显示的结果 (输入 :noh 按下 <Tab> 键 即可自动补全)
# 替换
ra # 当前字符替换为 a , r->replace
:%s/old/new/g # 替换全文的所有的匹配 g->global
:%s/old/new/ # 替换所有行第一个匹配
:s/old/new/g # 替换当前行所有匹配
:s/old/new/ # 替换当前行第一个匹配
# 插入
a # 在当前位置后插入 a->append
A # 在当前行尾插入
i # 在当前位置插入 i->insert
I # 在当前行首插入
o # 在当前行之后插之一行
O # 在当前行之前插入一行
s # 删除光标所在字符,并进入插入模式
S # 删除光标所在的行,并进入插入模式
# 选中
v # 从光标当前位置开始,光标所经过的地方会被选中,再按一下 v 结束 (类似 <shift>+方向建) v->view 可视模式
V # 从光标当前行开始,光标经过的行都会被选中,再按一下 V 结束
# 删除
d # 删除选中 (删除内容到了缓冲区可以被粘贴,相当于剪切) d->delete
x # 删除当前字符
3x # 删除当前光标向后三个字符 (vim 经常用 <数字>+<命令> 组合)
dd # 删除当前行
dw # 删除光标所在字符至下个单词开头 dw -> delete word
d$ # 删除当前字符到行尾 %->正则中就是行尾
3d # 删除当前行开始三行
J # 合并两行 (即删除当行尾换行符) J->join
# 撤销
u # 撤销 u->undo
U # 撤销对正行的操作
Ctrl+r # 恢复撤销
# 复制粘贴
y # 复制选中
yy # 复制当前行
p # 在当前光标后粘贴,如果复制了一行则粘贴到下一行 p-paste
P # 在当前光标前粘贴
ddp # 交换当前行和下一行 (巧妙运用了剪切粘贴)
xp # 交换当前字符和下一个