vim使用笔记

对常在linux下写代码的人来说,编辑器首推vim和emacs。emacs号称神的编辑器,我觉得这是因为它是GNU大神Stallman开发的缘故,我也用过一段时间emacs,但是一般系统安装时都默认不会安装它,于是后来不常用了。而vim一般系统上都会带着,那这篇就记录一下号称编辑器之神的vim的常见使用方法。

常用配置

linux下的配置

vim ~/.vimrc

1
2
3
4
5
6
7
8
9
syntax on #语法高亮
set nocompatible #去掉vi一致性模式
set number #显示行号
set autoindent #自动对齐
set smartindent #智能对齐
set cindent #c语言风格对齐
set tabstop=4 #设置tab键为4空格
set shiftwidth=4 #自动缩进时为4空格
set textwidth=0 #设置不自动换行

windows下的配置

下面是我在windows下使用vim时的终极配置,主要解决UTF8文件乱码问题。

vim %VIMHOME%/_vimrc

1
2
3
4
5
6
7
8
9
10
11
12
set encoding=utf-8
set fileencodings=utf-8,gbk,cp936
language messages zh_CN.utf-8
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
set termencoding=cp936#解决终端乱码
set nobackup
set ai
set si
set ci
set ts=4
set sw=4

其它配置

其实vim配置文件中是以双引号注释的,我写这篇文章的时候加双引号老是语法高亮,于是我就用了linux下的常用注释方式。

有些配置写在配置文件中不是很合适,因为在文档编辑过程中可能经常修改,这里列出来。

1
2
3
4
5
6
7
8
9
set nu #显示行号
set nonu #关闭行号
set paste #设为粘贴模式,粘贴时不自动缩进
set nopaste #关闭粘贴模式
set ff? #显示当前文件格式
set ff=unix #将文件转换成unix格式
set ff=dos #将文件转换为dos格式
set ignorecase|ic #设置查找时忽略大小写
set noignorecase|noic #查找时不忽略大小写

常用操作

移动光标

操作 说明
hjkl 前下上右
ctrl-f,ctrl-b 向下、向上翻页
0,$ 移动到行的最前、最后
^ 移动到一行除空白外的最前
G,nG,gg 移动到最后、第n、第一行
zz,zt,zb 光标所在的行居中、上、下
一般模式下输入数字n回车 向下移动n行

搜索和替换

操作 说明
/word 搜索单词word
n,N 向下、向上搜
:n1,n2s/w1/w2/g 替换n1-n2行间的w1为w2
:1,$s/w1/w2/g 替换所有
:%s/w1/w2/g 替换所有
:%s/word//gn 统计word出现次数

正则表达式

批量注释

ctrl+v 进入列编辑模式,向下或向上移动光标,把需要注释的行的开头标记起来,然后按大写的I(shift+i),再插入注释符,比如”//“,再按Esc,就会全部注释了

ctrl+v,进入列编辑模式,横向选中列的个数(如”//“注释符号,需要选中两列),然后按d, 就会删除注释符号

windows下为ctrl+q

批量缩进:v进入可视模式,选择要缩进的代码块,>缩进、<缩回

查找选中的内容

  1. v
  2. h/j/k/l
  3. y
  4. /
  5. ctrl-r
  6. 0

复制粘贴删除等操作

操作 说明
x,X 向后、向前删除一个字符
nx 向后删除n个字符
dd,ndd 删除1行、n行
yy,nyy 复制1行、n行
p,P 在光标后、前粘贴
u 撤销
ctrl-r 重做
. 重复上个动作

模式切换

一般模式到编辑模式

使用vim打开一个文件时默认进入一般模式。

操作 说明
i,I 插入
a,A 增加
o,O 新行
r,R 取代模式
按下esc键 退出编辑模式

一般模式到命令模式

在一般模式下按下:键即可进入命令模式。命令模式下的常见操作有:

操作 说明
:w,:q,:wq,:q!,:x 保存、退出
:w filename 另存为
:r filename 读入到当前
:e filename 编辑另一个文件
:! cmd 执行命令cmd
:set xxx 设置xxx项,如:set tw=0

编程时常用操作

操作 说明
% 括号匹配
ctrl-p 自动补全
:cd /p/p1/ 切换目录
:pwd 当前工作目录
:ls 当前打开的所有文件
:bd 关闭当前文件
shift+v 视图,用于选择文本
ggVGyy 全选复制
ctrl+6 两个打开的文件间切换
:bn 下一个文件
:bp 上一个文件
b1~n 切换至第n个打开的文件
:sp 水平分割窗口
:vsp 垂直分割窗口
:close 关闭分割窗口
ctrl+w+h/j/k/l 切换至前/下/上/后的窗口
ctrl+ww 一次向后切换
= 格式化选中内容
gu,gU 转换成小写、大写
J 合并下一行
:g/^/m0 倒置文件内容
:10,20s#^#//#g 用//注释10到20行
:10,20s#^//##g 删除10到20行的注释//

剪贴板使用

将系统剪贴板内容粘贴进当前buffer中:在编辑模式下按shift+insert

:reg #查看剪贴板内容

选中文本,”+y复制到系统剪贴板,”+p将系统剪贴板内容粘贴到普通模式下的光标所在处

更多操作

操作 说明
:E 浏览目录
:bn/bp/bl/bf 向后/向前/最后/第一个缓冲区切换
:He(!) 在下(上)面分屏浏览目录
:Ve(!) 在左(右)边分屏浏览目录
:Te tab页浏览文件
gt 下一个tab页
gT 上一个tab页
{i}gt 到第i个tab页
tabs 查看所有tab页编号-名
guu 把一行全部变成小写
gUU 把一行全部变成大写
ga 查看光标处字符的ascii码
g8 查看光标处字符的utf8编码
*/# 查找光标处的单词
ctrl-o 向后回退光标移动
ctrl-l 向前追赶光标移动
‘’ 两个单引号,跳转到光标上次停靠
:cw 在分屏中显示命令结果
gd 高亮显示光标处的单词
ctrl-w,q 退出当前窗口
:edit ++enc=cp936 buffer设为gb2312查看
:edit ++enc=utf-8 buffer设为utf-8查看
cw change word
c0 改变当前到行首
c$ 改变当前到行尾
z回车 当前行置顶
z. 当前行置中
z- 当前行置底
H/M/L 移动光标到当前屏的上/中/下
回车 移动光标到下一行首字符
- 移动光标到上一行首字符
^ 移动光标到第一个非空字符
:resize +10 调整split窗口大小
:vertical resize -10 调整vertical split窗口大小
ci”,( 在“”或()中输入
f字符 向后条到本行下一个字符