vim操作技巧

不知不觉使用vim已经有一些时间了,也算得上真正掌握使用技巧了吧。想不起来当初为什么去学习这个编辑器,也不记得怎么学会使用编辑文件,只记得当初按完所有的键盘按键都没有退出vim。一颗种子要经过多少风雨才能长成参天大树,一条小溪要经过多少高山河流才能汇入大海。我们平常学习一样东西,要经过多少困难,多少挫折,只有自己最清楚。

vim模式

普通编辑器都可以直接打开文件进行编辑、保存、使用快捷键等等,vim也具备这些功能,但是有些功能要在特定模式下才能使用。也是因为这些模式,让vim学习路线变得特别比较陡峭。vim具有多种模式,每种模式都有特定功能,有时你需要某些功能时,特意切换到指定模式下操作。使用键盘就可以随意切换模式,让vim不依赖鼠标操作,使用最小化组合键的操作,编辑效率大大提高。

普通模式

eELfaQ.md.gif

使用vim打开文件,进入普通模式,也是vim默认模式。在这个模式下,可以移动光标,复制、剪切、粘贴、删除文件,在这个模式下输入按键全部都是命令快捷键。比如你想进行复制操作,yy 复制当前行,p 粘贴光标下面,dw 删除一个单词。使用a 切换到插入模式,还有其他的快捷键也能做到,: 切换到命令模式Ctrl + v 进入选择模式

插入模式

insert

左下角显示-- insert --,表明vim正处于插入模式。这个模式会读取键盘输入,显示在屏幕内,大部分编辑器打开就处于插入模式。使用Esc 可以重新进入普通模式,但是输入字符不会保存到文件中。

可视模式
visual.git

这个模式主要功能,可以使用移动命令,扩大高亮的文本区域。输入命令将直接作用于选中文本区域。这就相当于你用鼠标选中一段文本区域,可以使用可以使用命令进行,复制、剪切、修改操作,但是vim并不需要鼠标。

选择模式
select

这个模式要在可视模式下才能进入,可以直接使用退格键或者空格键删除选中文本区域,或者直接输入新的文本,替换选中高亮区域进入插入模式。

命令模式

cmd

在普通模式下输入: ,被解析成命令模式,:后面接命令,回车直接执行命令。例如上图,:q回车直接退出vim编辑器。一般退出vim,需要在命令模式下输入:wq,保持退出。

Ex模式

ex.git

在普通模式使用Q 命令进入ex模式,这和命令行模式比较相似,在使用":visual"命令离开Ex模式前,可以一次执行多条命令。这个命令自己使用得很少,只是从google上知道这些。

平常在使用vim主要是在普通模式、插入模式、可视模式、命令模式进行操作,掌握这里基本就可以熟悉使用vim了。

vim命令快捷键

全局移动
  • h 向左移动 ←
  • j 向下移动 ↓
  • k 向上移动 ↑
  • l 向右移动 →

掌握这些快捷键,移动光标得时候,手机基本不会离开核心键盘区,有没有像w,a,s,d移动角色的感觉🙂。

  • gg 快速移动到开头
  • G 快速移动文本结尾
  • Ctrl - f 向下翻页 即 PageDown 翻页
  • Ctrl - b 向上翻页 即 PageUp 翻页
  • 命令模式:n 移动指定行数n
行内移动
  • w 或者 W 移动到下一个单词(word)
  • b 或者 B 移动到上一个单词
  • e 移动下一个单词结尾
  • ^ 移动到当前行第一个非空字符
  • 0 移动到行首
  • $ 移动到行尾
  • f{char} 在行内正向查找char字符,光标会移动到目标char上
  • F{char} 在行内反向查找char字符,光标会移动到目标char上
  • ; 在行内正向重复搜索char字符,同上
  • , 在行内搜索上个一个char字符,反向搜索,同上
进入插入模式

要想编写文本内容,还必须在插入模式下进行操作,以下命令由普通模式进入到插入模式

  • i 进入插入模式,在当前光标下输入
  • o 在当前光标下面新建空白行插入字符
  • a 在光标后台插入字符(append)
  • A 在行尾插入,a$ => A
  • I 在行首插入, i^ => I
  • O 在光标上面新建空白行插入
  • s 删除当前光标字符,进入插入模式
删除

d 删除字符(delete),d本身没有任何涵义,但是它可以跟其他命令组合,完成一些快速操作。

  • x 删除当前字符
  • dd 删除当前行
  • dw 从光标开始删除整个单词(delete word)
  • db 从光标往前删除到一个字符,反向移动删除,如果
  • dbx 反向删除整个单词
  • d$ 从当前位置删除到行结尾
  • d^ 反向删除到行开头
  • ndd n 表示删除行数,2dd 删除两行
  • ddn 同上
了解vim操作

Vim的强大很大程
度上源自操作符与动作命令相结合。在本节,我们将看到它是如何工作的,并考虑其寓义 --vim实用技巧第2版

<font size=5>操作符 + 动作命令 = 操作</font>

d<span style="color:red;">{motion}</span> 命令可以对一个字符dl、一个完整单词daw
一整个段落dap进行操作,它作用的范围由动作命令决
定。c<span style="color:red;">{motion}</span>、y<span style="color:red;">{motion}</span> 以及其他一些命令也类似,它们被统称为操作符(operator)。

<center>Vim的操作符命令</center>

命令 用途
c 修改(change)
d 删除(delete)
y 复制到寄存器
g~ 反转大小写
gu 反转小写
gU 反转大写
> 增加缩进
< 减小缩进
= 自动缩进

看着上面删除操作,是不是很容易理解操作符 + 动作命令 的模式,比如我们已经知道daw删除整个单词,gU反转大写,我们就可以使用gUaw反转整个单词,gUap 反转整个段落大写

学会举一反三
  • ea 在单词后面插入
  • cw 修改整个单词
  • c$ 修改从光标到行尾的内容
  • c^ 修改从光标到行首的内容
  • yw 复制从光标开始到词尾的字符
  • y^ 复制从光标到行首的内容
  • y$ 复制从光标到行尾的内容
  • nyy 复制n行

vim复制剪切操作

由于vim中copy快捷键已经被change修改占用了,只能使用y代表复制(yank),粘贴(put)使用pd其实是将内容剪切到寄存器中,剪切实现删除操作。ddp 看起来是将两行位置互换,其实先剪切当前行到寄存器中,p粘贴到光标下的位置。主要记住使用命令y + 动作指令 或者 d + 动作指令,都是将文本暂存到寄存器中,使用p 或者P 进行粘贴。进行一个小demo练习,将变量field替换下面的函数参数foo。

let field = method();
fun(foo)

思路: 先使用yw复制field字段,下移动foo中,dw删除foo,P粘贴。但是你会发现粘贴结构居然还是foo。这是因为dw将删除文本放入寄存器中,覆盖了上面copy的变量。我们平常复制,剪切的文本都会暂存再无名寄存器中。

认识无名寄存器

在vim不使用单一寄存器进行复制、剪切、粘贴,而是为这些操作提供多组寄存器。当使用删除、复制与粘贴命令时,可以明确指定它们中的某一个进行操作。

在vim中的删除、复制、粘贴都是使用寄存器,可以使用"{registerName}方式命名寄存器。平时我们使用dd,yy命令,不指名寄存器名称默认使用无名寄存器。倘若没有指定要使用的寄存器,Vim将缺省使用无名寄存器,它可以用双引号表示(参见 :h quote_quote )。无名寄存器可以使用""表示,比如""yy 相当于yy""p 相当于p

数字寄存器

"[0-9]表示数字寄存器,数字越小表示最早在寄存器内容。例如"0表示第一个进入寄存器文本,"1表示第二个进入寄存器内容,类似值栈结构,先进后出排列。可以使用:reg 查看寄存器中内容。

reg.png

比如上面的例子我们可以使用"0P 粘贴field 变量,就不害怕被覆盖的情况。

系统寄存器

在win系统中,可以在任意地方Ctrl c复制文本,vim是否可以粘贴非vim中复制内容?当然是可以的。"+表示系统寄存器,可以读取系统vim之外的系统粘贴板中的内容,可以粘贴内容,复制到系统粘贴板中去。ubuntu上需要安装vim-gnome,才可以正常使用系统寄存器。

粘贴

  • p 将寄存器中的文本粘贴到光标之后
  • P 将寄存器中的文本粘贴到光标之前

使用粘贴命令前面+寄存器名称,就可以直接使用专用寄存器中的内容了,例如"+p直接粘贴系统剪贴板中的内容。

在插入模式使用<Ctrl r> + 寄存器名称粘贴字符文本。例如可以使用<Ctrl r>"粘贴无名寄存器中内容。

本文章有部分内容参考 《vim实用技巧第2版》,有兴趣的同学可以买一个本来看看,真的很不错哦!

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270

推荐阅读更多精彩内容

  • 在编写代码的过程中,选择代码是一项非常常见的操作,其他文本编辑器都是使用鼠标进行选择,我在使用其他编辑器的时候,编...
    xinxingzhao阅读 1,204评论 0 1
  • Vim几句话介绍Vim是Unix系统上的文本编辑软件(你该不会不知道什么是文本编辑软件吧!),在windows上也...
    何必遠方阅读 3,027评论 0 3
  • 在IDEA Intellij小技巧和插件一文中简单介绍了一下IdeaVim插件。在这里详细总结一下这个插件在日常编...
    BakerZhang阅读 4,353评论 0 9
  • 在 IDEA Intellij小技巧和插件 一文中简单介绍了一下IdeaVim插件。在这里详细总结一下这个插件在日...
    司马子临阅读 3,337评论 0 0
  • 前言 vim这东西还算是学校教的能排上用场的东西,当然咯,当时不知道能这么装逼呢,以为有窗口为毛还需要这玩意,后面...
    吉凶以情迁阅读 392评论 0 1