Vim使用小记(一)常用操作
By francis_hao Sep 22,2016
vim的功能自然不止如此,这里只是把日常使用频率较高的记录下来,若想了解vim的全部功能可查阅其帮助手册:help,或者查询指定命令的用法:help xx
选项
|
选项 |
说明 |
|
+[num] |
对第一个文件,在打开后,光标将会定位在第num行,如果num没有指定,光标将会定位在最后一行 |
|
+/<pat> |
对第一个文件,光标将会定位在第一次出现pat的地方,查看":help search-pattern" 了解可用的搜索模式 |
|
-o[N] |
以横向方式同时打开N个窗口,如果没有指定N,就为每个文件打开一个窗口 |
|
-O[N] |
以纵向方式同时打开N个窗口,如果没有指定N,就为每个文件打开一个窗口 |
基本用法
进入插入模式命令
|
i |
在光标前开始插入文本 |
|
a |
在光标后开始插入文本 |
|
o |
在当前行之下新开一行 |
|
O |
在当前行之上新开一行 |
光标移动命令
|
gg, :0 |
光标转到首行行首 |
|
G, :$ |
光标转到末行行首 |
|
0 |
光标移到本行行首 |
|
$ |
光标移到本行行尾 |
|
n+ |
光标下移n行 |
|
n- |
光标上移n行 |
|
nG, :n |
光标移至n行行首 |
|
Ctrl+u |
上翻半屏(up) |
|
Ctrl+d |
下翻半屏(down) |
|
Ctrl+b |
上翻一屏(backwards) |
|
Ctrl+f |
下翻一屏(forward) |
|
() |
句子移动 |
|
{} |
段落移动 |
|
H |
光标定位到屏幕顶部 |
|
M |
光标定位到屏幕中间 |
|
L |
光标定位到屏幕底部 |
|
w |
光标向前移动一个单词(word) |
|
b |
光标向后移动一个单词(back) |
|
e |
光标移动到当前单词的结尾(end) |
|
zt |
将当前行变为屏幕第一行(top) |
|
zz |
将当前行变为屏幕中间行 |
|
zb |
将当前行变为屏幕尾行 |
|
Ctrl+e |
屏幕上移一行但光标位置不变 |
|
Ctrl+y |
屏幕下移一行但光标不变 |
删除复制和替换
|
dd |
删除整行 |
|
d0 |
从当前位置删至行首 |
|
d$, D |
从当前位置删至行尾 |
|
ndd |
删除n行 |
|
dl |
删除光标位置一个字符 |
|
dw |
删除当前位置至单词结尾 |
|
cc |
删除当前行并进入插入模式,cl,cw类似d |
|
yy |
复制当前行,yl,yw类似d |
|
p |
粘贴 |
|
r |
修改光标所在位置字符 |
|
s |
删除光标所在位置字符并进入插入模式 |
|
u |
撤销上一次的操作 |
|
Ctrl+r |
恢复上一次的操作 |
查找和替换
|
/pattern |
从光标处开始向文件尾搜索pattern,在pattern后加\c可以不区分大小写 |
|
?patern |
从光标处开始向文件首搜索pattern |
|
n |
在同一方向重复上一次搜索命令 |
|
N |
在反方向重复上一次搜索命令 |
|
: nohlsearch (noh) |
取消搜索结果的高亮显示 |
|
:s/p1/p2/g |
将当前行中所有p1用p2替代 |
|
:n1,n2s/p1/p2/g |
将第n1至n2行中所有p1均用p2替代 :1,$从第一行到末行=% |
|
* |
向文件尾搜索匹配光标所在字 |
|
# |
向文件首匹配光标所在字 |
寄存器说明
vim里有许多寄存器,暂时只记录平时有用过的。
|
"" |
默认寄存器,文本来源命令d/c/s/x/y |
|
"0 |
复制缓存,来源为yy命令 |
|
"1-"9 |
删除缓存,来源为dd命令 |
|
"a-"z |
自定义的寄存器,不会被系统自动冲刷,总是存储最后一次使用的值。 "A-"Z : 向"a-"z寄存器中追加新内容而不是覆盖,虽然"A-"Z本身不是寄存器,但是却可以引用。 |
|
"ayy |
复制当前行并将其存放在"a寄存器中 |
|
"_ |
黑洞寄存器,只进不出 |
|
:reg |
查看寄存器里的值(全名为:registers) |
eg:
下图左侧是vi中的文字,1yy表示第一次执行yy命令,以下以此类推,右侧为执行后的寄存器中的值


扩展部分
杂项
|
v |
可视行 |
|
Ctrl+v |
可视列 |
|
Ctrl+g |
查看当前文件信息(文件名和行数) |
|
:!command |
暂时退出vi,执行command命令并输出结果 |
|
!!command |
执行command命令并将执行结果输出到当前行(覆盖方式) |
|
!}command |
执行command命令并将执行结果输出到当前行和之后的行中(覆盖方式) |
|
:r hello |
将hello文件读入当前文件中 |
|
:n1,n2 w>>fox |
将n1至n2追加到fox文件中 |
|
:Ex |
(:Explore)开启目录浏览,可以浏览当前目录下的所有文件,可以选择 |
|
:Sex |
(:Sexplore)水平分割当前窗口,并在一个窗口中开启目录浏览器 |
|
:shell |
不关闭vi切换到shell命令行,退回到vi使用:exit |
|
. |
重复上一个操作 |
多文件编辑
|
$vi f1 f2 f3 |
同时打开f1 f2 f3 |
|
:n |
切换到下一个文件(:next) |
|
:bn |
切换到下一个文件(:bnext) |
|
:prev |
切换到上一个文件(:previous) |
|
:bp |
切换到上一个文件(:bprevious) |
|
:n# |
切换最近两个文件 |
|
:e# |
|
|
Ctrl+6 |
|
|
:buffers |
显示缓冲区的文件列表 |
|
:ls |
|
|
:b buffnum |
切换到buffnum的文件,buffnum是缓冲文件列表的值 |
|
:bd buffnum |
关闭buffnum的文件(:bdelete ) |
|
:rewind |
切换到第一个文件 |
|
:e f4 |
在缓冲区添加新的文件,和之前打开的文件属于并列关系 |
|
:e! |
重新载入当前文件,用在撤销当前所有做过的修改 |
|
:mksession! [name.vim] |
保存多文件会话状态 |
|
$vim –S name.vim |
vim重载之前的多文件会话状态 |
|
:source name.vim |
手动重载之前会话 |
多标签
|
$vim –p f1 f2 f3 |
以多标签的方式打开多个文件 |
|
gt |
向右切换标签 |
|
gT |
向左切换标签 |
|
:tabnew filename |
添加一个新标签 |
|
:tabc |
关闭当前的tab |
|
:tabo |
关闭其他的tab只留当前一个 |
|
:tabs |
查看所有打开的tab |
|
:tabp |
前一个 |
|
:tabn |
后一个 |
set
|
vimrc |
系统 vimrc 文件: "/etc/vimrc"(优先级低) 用户 vimrc 文件: "$HOME/.vimrc" 第二用户 vimrc 文件: "~/.vim/vimrc" 用户 exrc 文件: "$HOME/.exrc"
vim的配置文件,一些配置信息可写入此文件中,但也可以在打开的文件中使用:set以实现一次性的功能 |
|
:version |
查看vim版本信息 |
|
" |
.vimrc文件中的注释行 |
|
:set paste |
设置为粘贴模式,所见即所得,不会因为注释乱了格式 |
|
:set |
显示常用的设置值 |
|
:set list |
显示不可见字符 |
vi编码
set encoding=utf-8
set fileencodings=utf-8,ucs-bom,gb18030,gbk,gb2312,cp936
set termencoding=utf-8
程序员专用
杂项
|
K |
跳转到光标所在函数或命令的man手册 |
|
J |
将当前行的下一行合并到当前行 |
|
% |
跳转到匹配"{"对应的"}"的位置 |
|
gd |
跳到局部的变量定义处,不能跨文件 |
|
gf |
打开光标所在位置的文件名,一般是头文件 ctrl+w f分屏打开文件 |
|
> |
缩进,<:反缩进 |
|
Ctrl+o |
跳转到上一视图,可用于搜索后、使用gg|G跳转或tag跳转的返回 |
|
''(两个单引号) |
在上一视图和本视图之间切换 |
|
ma |
设置标签a,之后可以通过`a跳转到设置的标签a处,类似的标签:a-z |
|
~ |
可转换光标所在位置的字母大小写 |
|
gg=G |
整个文件重置缩进 |
|
2G=15G |
第二行至第15行重置缩进 |
|
:set ft=c |
设置文件类型是c (filetype) |
|
:filetype |
显示当前文件类型相关的设置 |
文件比较
|
$vimdiff f1 f2 |
直观的比较f1和f2的不同(vimdiff是shell下一个链接命令,指向vim) |
|
:vertical diffsplit xxx |
垂直方式比较当前文件和xxx文件 |
|
zo |
打开光标下面的一个折叠(open) |
|
zO |
打开光标下面的所有折叠 |
|
zc |
关闭光标下面的一个折叠(close) |
|
zC |
关闭光标下面的所有折叠 |
|
:set noscrollbind |
取消文件比较中的同步滚屏功能 |
|
]c |
跳到下一个修改点 |
|
[c |
跳到上一个修改点 |
|
:diffupdate |
在比较过程中,修改过一个文件后更新比较状态 |
|
dp |
把光标所在窗口的差异改到另一个窗口(:diffput) |
|
do |
把光标所在窗口的差异改为另一个窗口的(:diffget) o=obtain |
|
:diffoff! |
强制关闭比较模式 |
窗口分割
|
:split xxx |
打开xxx并与当前文件水平排列 |
|
:vsplit xxx |
打开xxx并与当前文件垂直排列, |
|
:15split xxx |
以占据15行的窗口打开文件xxx |
|
:new [xxx] |
新建(打开)一个与当前文件水平排列的文件 |
|
:vnew [xxx] |
新建(打开)一个与当前文件垂直排列的文件 |
|
ctrl+w w |
在打开的文件中跳转 |
|
Ctrl+w [hjkl] |
跳转到[左下上右]的窗口 |
|
Ctrl+w [tb] |
跳转到最上/最下的窗口 |
|
Ctrl+w [HJKL] |
把当前窗口移动到最[左下上右]边 |
|
Ctrl+w + |
扩大窗口(默认一行),5ctrl+w +(扩大5行) |
|
Ctrl+w = |
平分窗口 |
|
Ctrl+w _ |
扩大窗口到最大,带参数{height}ctrl+w _ |
|
:res(ize) num |
窗口大小调整为num行 |
|
:res(ize) +num |
窗口大小增加num行 |
|
:vertical res(ize) num |
窗口大小调整为num列 |
|
:close |
关闭当前的(不能是最后一个)的窗口 |
|
Ctrl+w c |
|
|
:only |
关闭除当前窗口外的所有窗口 |
|
:qall |
关闭所有打开的窗口 |
|
:wall |
保存所有的打开的窗口文件 |
|
:wqall |
保存并退出 |
|
$vim –o f1 f2 f3 |
以水平排列方式打开三个文件 |
|
$vim –O f1 f2 f3 |
以垂直排列方式打开三个文件 |
|
:all |
将已经打开的多个文件分配水平的窗口 |
|
:vertical all |
将已经打开的多个文件分配垂直的窗口 |
|
Ctrl+w o |
只显示当前窗口, |
ctags
|
$ctags --list-languages |
显示ctags支持的语言 |
|
$ctags --list-maps |
默认支持的文件扩展名 |
|
$ctags -R |
给当前文件夹下的所有文件建立tags |
|
~set tags=/tags |
在.vimrc文件中设置tags的路径,如果有多个tags可以用","分割,或者set tags+=/tags进行添加。 |
|
:tag main |
可以从打开的文件中跳到main函数处,即使打开的文件中没有main函数(在别的文件中也可以跳过去) |
|
Ctrl+] |
以光标所在位置的单词为tag跳转 |
|
Ctrl+t |
跳回到之前的位置,可以在前面加上跳转的深度,3ctrl+t:跳回之前三层之上的位置 |
|
:tags |
列出已经跳转到过哪些tag了 |
|
:tag /^block<tab> |
查找以block开头的可能的tag |
|
Ctrl+w+] |
分割当前窗口并跳转到光标所在位置的tag处 |
|
:stag xxx |
|
|
$vim –t tag |
找到tag(函数,结构体等)所在文件并打开 |
|
:tn |
多个匹配tags时跳转下一个(:tnext) |
|
:tp |
多个匹配tags时跳转上一个(:tprevious) |

本文由 刘英皓 创作,采用 知识共享 署名-非商业性使用-相同方式共享 3.0 中国大陆 许可协议进行许可。欢迎转载,请注明出处:
转载自:http://www.cnblogs.com/yinghao1991/p/6517071.html
参考
【1】VIM使用系列:寄存器与复制粘贴缓冲区:https://my.oschina.net/shelllife/blog/144357
【2】VIM字符编码设置:http://www.cnblogs.com/freewater/archive/2011/08/26/2154602.html
【3】linux下vim中文乱码的解决方法:http://www.cnblogs.com/joeyupdo/archive/2013/03/03/2941737.html
【4】VIM技巧之分隔窗口:http://blog.chinaunix.net/uid-24673811-id-1994607.html
【5】vim中多标签和多窗口的使用:https://my.oschina.net/kutengshe/blog/464602
【6】开启文件类型检测:http://easwy.com/blog/archives/advanced-vim-skills-filetype-on/
【7】man vim
Vim使用小记(一)常用操作的更多相关文章
- vim的几个常用操作
现在很少会有人用vim来写代码,所以vim更常用在server上面编辑配置文件或者少量代码编辑: vim操作命令非常之多,如果仅用作一个配置文件的编辑器,掌握几个常用的操作就够了: 常用的操作其实就是 ...
- vim 打开文件的常用操作
一.如果在终端中开没有打开vim,可以: 横向分割显示: $ vim -o filename1 filename2 纵向分割显示: $ vim -O filename1 filename2 二.如果已 ...
- vim常用操作技巧与配置
vi是linux与unix下的常用文本编辑器,其运行稳定,使用方便,本文将分两部分对其常用操作技巧和配置进行阐述,其中参考了网上的一些文章,对作者表示感谢 PART1 操作技巧 说明: 以下的例子中 ...
- [编辑器]vim常用操作
我是ide的用户,对于vim一只停留在:打开.看.写.关闭基本操作,因为现在更多的接触linux服务器,所以为了提高 效率,用好vim是必备技能!下面罗列一些vim的常用操作,用做备忘(不断更新): ...
- 关于vim的常用操作
vim常用操作和使用技巧 vi是linux与unix下的常用文本编辑器,其运行稳定,使用方便,本文将分两部分对其常用操作技巧和配置进行阐述,其中参考了网上的一些文章,对作者表示感谢 PART1 操作技 ...
- vim常用操作和使用技巧
vi是linux与unix下的常用文本编辑器,其运行稳定,使用方便,本文将分两部分对其常用操作技巧和配置进行阐述,其中参考了网上的一些文章,对作者表示感谢 PART1 操作技巧 说明: 以下的例子中 ...
- (转)vim(vi)常用操作及记忆方法
vim(vi)常用操作及记忆方法 原文:https://www.cnblogs.com/doseoer/p/6241443.html vi(vim)可以说是linux中用得最多的工具了,不管你配置服务 ...
- VIM常用操作手册
VIM常用操作手册 1.多行操作,多行注释,多行取消注释 https://jingyan.baidu.com/article/9c69d48f43ed6d13c8024e7b.html 2.常用操作 ...
- Linux下Vim常用操作
linux下Vim的常用操作 linux 首先\(ctrl+Alt+t\)打开小框框 \(./\):相当于手机上的\(home\)键 \(ls\):当前文件夹的东东 \(mkdir\) ...
- vim程序编辑器---常用操作整理
vim程序编辑器---常用操作整理 移动光标方法 o 在光标行的下一行,进入编辑模式 $ 移动到光标这行,最末尾的地方 G(大写) 移动到文件最末行 :set nu 文件显示行数 :set non ...
随机推荐
- 1826: [JSOI2010]缓存交换
1826: [JSOI2010]缓存交换 https://www.lydsy.com/JudgeOnline/problem.php?id=1826 分析: 简单的贪心,然后调啊调...最近怎么了,码 ...
- ora-12154 TNS:"无法处理服务名"的一个解决方法
http://www.cnblogs.com/xh3/archive/2007/04/21/722217.html 很怪异的一个问题,在网络环境下配置客户端,竟然怎么也连不上主机了,看了不少帖子,大多 ...
- App间常用的五种通信方式
1.URL Scheme 2.Keychain 3.UIPasteboard剪切板 4.UIDocumentInteractionController 5.local socket 详见: 转自:ht ...
- python 字典(dict)按键和值排序
python 字典(dict)的特点就是无序的,按照键(key)来提取相应值(value),如果我们需要字典按值排序的话,那可以用下面的方法来进行: 1 下面的是按照value的值从大到小的顺序来排序 ...
- android中接入twitter进行第三方登录
在应用中接入Twitter进行第三方登录时,开发人员遇到了一点问题,主要是概念有点混乱,这里把经验记录一下,帮助遇到同样问题的朋友. 一.注册应用并配置登录权限 这一步比较简单,就不多说了,直接去官网 ...
- Vm Ubuntu 文件共享问题
其实也是差不多的,就是需要重新安装一次工具 ,自己安装有问题,自己在手动安装一次就好了 下面是一个我的参考文章 http://blog.csdn.net/zz962/article/details/7 ...
- Prometheus 普罗米修斯监控
周末在家无聊 看新闻 看到关于监控的东西 拿来玩玩 试一下 感觉还蛮有意思 特此记录一下 这里只介绍客户端的配置 1:首先在POM中添加依赖 <dependency> <groupI ...
- JAVA的文件操作【转】
11.3 I/O类使用 由于在IO操作中,需要使用的数据源有很多,作为一个IO技术的初学者,从读写文件开始学习IO技术是一个比较好的选择.因为文件是一种常见的数据源,而且读写文件也是程序员进行IO编程 ...
- java获得采集网页内容的方法小结
为了写一个java的采集程序,从网上学习到3种方法可以获取单个网页内容的方法,主要是运用到是java IO流方面的知识,对其不熟悉,因此写个小结. import java.io.Buffe ...
- HDU 1398 Square Coins 整数拆分变形 母函数
欢迎参加——BestCoder周年纪念赛(高质量题目+多重奖励) Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit ...