概述
By francis_hao Sep 22,2016
vim的功能自然不止如此,这里只是把日常使用频率较高的记录下来,若想了解vim的全部功能可查阅其帮助手册:help,或者查询指定命令的用法:help xx
选项
选项说明
+[num]对第一个文件,在打开后,光标将会定位在第num行,如果num没有指定,光标将会定位在最后一行
+/对第一个文件,光标将会定位在第一次出现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.vimvim重载之前的多文件会话状态
: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查找以block开头的可能的tag
Ctrl+w+]分割当前窗口并跳转到光标所在位置的tag处
:stag xxx
$vim –t tag找到tag(函数,结构体等)所在文件并打开
:tn多个匹配tags时跳转下一个(:tnext)
:tp多个匹配tags时跳转上一个(:tprevious)
参考
【7】man vim
最后
以上就是平常吐司为你收集整理的vim 寄存器 操作_Vim使用小记(一)常用操作的全部内容,希望文章能够帮你解决vim 寄存器 操作_Vim使用小记(一)常用操作所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复