对常在linux下写代码的人来说,编辑器首推vim和emacs。emacs号称神的编辑器,我觉得这是因为它是GNU大神Stallman开发的缘故,我也用过一段时间emacs,但是一般系统安装时都默认不会安装它,于是后来不常用了。而vim一般系统上都会带着,那这篇就记录一下号称编辑器之神的vim的常见使用方法。
常用配置
linux下的配置
vim ~/.vimrc
1 | syntax on #语法高亮 |
windows下的配置
下面是我在windows下使用vim时的终极配置,主要解决UTF8文件乱码问题。
vim %VIMHOME%/_vimrc
1 | set encoding=utf-8 |
其它配置
其实vim配置文件中是以双引号注释的,我写这篇文章的时候加双引号老是语法高亮,于是我就用了linux下的常用注释方式。
有些配置写在配置文件中不是很合适,因为在文档编辑过程中可能经常修改,这里列出来。
1 | set nu #显示行号 |
常用操作
移动光标
操作 | 说明 |
---|---|
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进入可视模式,选择要缩进的代码块,>缩进、<缩回
查找选中的内容
- v
- h/j/k/l
- y
- /
- ctrl-r
- 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字符 | 向后条到本行下一个字符 |