vim实用笔记

安装插件管理器

git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

github仓库地址 查看使用方式

vim操作技巧

. 重复命令

. 命令重复上次的修改
什么是修改:除了普通模式中执行的修改命令之外,每次进入插入模式时,也会形成一次修改。从进入插入模式的那一刻起,直到返回普通模式为止,为一次修改。

将以下内容进行缩放

Line one
Line two
Line three
Line four

Line one
Line two
Line three
Line four

指令:
光标起始:第二行开头

>G
j
.
j.

用 . 的最佳实践:一键移动 一键操作


var foo = "method("+argument1+","+argument2+")";
替换成
var foo = "method(" + argument1 + "," + argument2 + ")";
在插入模式下,vim会将连贯的操作当成一次修改,但如果是有进行光标移动,记录的只是光标移动后的操作,要在 + 前后各加空格,必须移动光标。换一种思路,可以将+删除,再重新输入,就能有连贯的操作
f+
s + <esc>
;
.
;.
;.

逐个替换

...We're waiting for content before the site can go live...
...If you are content with this, let's go ahead with it...
...We'll launch as soon as we have the content...

逐个替换content为copy
光标定位在content

cwcopy<esc>
n
.

. 范式:用一次按键移动,另一次按键执行

普通模式

普通模式命令的强大,很大程度上源于它可以把操作符与动作命令结合在一起
控制撤销命令的粒度:从进入插入模式开始,直到返回普通模式为止,在此期间输入或删除的任何内容都被当成一次修改。只要控制<esc>键的使用,就可控制粒度

The end is nigh
删除末尾的单词nigh

daw
删除整个单词(aw是文本对象)

<c-a> 和 <c-x> 分别对数字执行加和减操作。如果带一个次数前缀,用于加减任意整数

.blog { background-position: 0px 0px }

修改
.news { background-position: -180px 0px }

cW.news<esc>
180<c-x> # 光标不在操作的数字上,会正向跳到所找到的第一个数字上

操作符+动作命令=操作

d{motion}命令可以对一个字符(dl), 一个完整单词(daw), 或一整个段落(dap)进行操作,它作用的范围由动作命令决定。c{motion}, y{motion} 也类似。统称为操作符(operator), 用 :h operator可查阅完整的列表
操作符与动作命令的结合形成了一种语法。规则为:一个操作由一个操作符,后面跟一个动作命令组成

操作符命令

|c   |修改|
|d   |删除|
|y   |复制到寄存器|
|g~  |反转为大小写|
|gu  |转换为小写|
|gU  |转换为大写|
|>   |增加缩进|
|<   |减少缩进|
|=   |自动缩进|
|!   |使用外部程序过滤{motion}所跨越的行|

插入模式

<c-h> 删除前一个字符
<c-w> 删除前一个单词
<c-u> 删至行首

插入模式只专注于做一件事:输入文字
普通模式是我们大部分时间所使用的模式
<c-o> 进入插入-普通模式

不离开插入模式,粘贴寄存器中的文本

Practical Vim, by Drew Neil
Read Drew Neil's

修改为:
Practical Vim, by Drew Neil
Read Drew Neil's Practical Vim.

yt,
jA
<c-r>0
.<esc>

在插入模式 用<c-r>{register}可以方便地粘贴文本

gv 重复上一次选区

将标签内容改为大写
<a href="#">one</a>
<a href="#">two</a>
<a href="#">three</a>

<a href="#">ONE</a>
<a href="#">TWO</a>
<a href="#">THREE</a>
gUit
j.
j.

修改列文本

li.one a{ background-image: url('/images/sprite.png'); }
li.two a{ background-image: url('/images/sprite.png'); }
li.three a{ background-image: url('/images/sprite.png'); }

li.one a{ background-image: url('/components/sprite.png'); }
li.two a{ background-image: url('/components/sprite.png'); }
li.three a{ background-image: url('/components/sprite.png'); }

光标在第一行的images开头
<c-v>jje
c
components
<esc>

在每行末尾添加;
var foo = 1
var bar = 'a'
var foobar = foo + bar

var foo = 1;
var bar = 'a';
var foobar = foo + bar;

光标在第一行的末尾
<c-v>jj$
A;
<esc>

I 光标移至行首并进入插入模式
A 光标移至行尾并进入插入模式

<!DOCTYPE html>
<html>
  <head><title>Practical Vim</title></head>
  <body><h1>Practical Vim</h1></body>
</html>

高亮选区后,进行命令模式,会将选区标识为'<,'>

:/<html>/,/</html>/p
操作html标签之间的内容
还可以用偏移对地址进行修正
如:不想包括<html>及</html>所在的行,可以为之加上偏移
:/<html>/+1,/</html>/-1p

Ex命令的地址及范围的符号:
1 文件的第一行
$ 文件的最后一行
0 虚拟行,位于文件第一行上方
. 光标所在行
'm 包含位置标记m的行
% 整个文件(:1,$的简写形式)

使用:t和:m命令复制和移动行

:copy的简写形式为:t

Shopping list
    Hardware Store
        Buy new hammer
    Beauty Parlor
        Buy nail polish remover
        Buy nails
Shopping list
    Hardware Store
        Buy new hammer
        Buy nails
    Beauty Parlor
        Buy nail polish remover
        Buy nails

:211t 208 将211行复制到208行

:6t. 把第6行复制到当前行下方
:t6 把当前行复制到第6行下方
:t. 复制当前行,相当于yyp(yyp会使用寄存器,而:t.则不会)
:t$ 把当前行复制到文本结尾
:6t0 把第6行复制到文件开头

合并命令行指令:
可将 :write 与 :!ruby % 合并为 :write | !ruby %

运行shell命令
给命令加一个叹号前缀,就可以调用外部程序
:!ls
在vim的命令行中,%代表当前文件名

把缓冲区内容作为标准输入或输出

:read !{cmd}将命令的标准输出重定向到缓冲区
:write !{cmd}将缓冲区内容作为指定{cmd}的标准输入

缓冲区操作
:ls 缓冲区列表
:bnext
:bprev
:bfirst
:blast
:bdelete n1 n2 n3
:N,M bdelete
通过缓冲区编号删除相应的缓冲区

窗口操作
:close 关闭活动窗口
:only 关闭除活动窗口外的其他所有窗口

更好更快地移动

基于单词的移动

w 正向移动到下一单词的开头
b 反向移动到当前单词/上一单词的开头
e 正向移动到当前单词/下一单词的结尾
ge 反向移动到上一单词的结尾
每个面向单词的动作命令,都有一个面向字串的命令与其对应,如 w 与 W, e 与 E

区分屏幕行与实际行
j k ^ $ 实际行
gj gk g^ g$ 屏幕行

f{char} 除了定位之外,还可以直接与动作命令结合在一起。如:dfa 从当前位置删除到下一个a的位置

f{char} 正向移动到下一个{char}所在之处
F{char} 反向移动到上一个{char}所在之处
t{char} 正向移动到下一个{char}所在之处的前一个字符上
T{char} 反向移动到上一个{char}所在这处的后一个字符上
; 重复上次的字符查找命令
, 反转方向查找上次的字符查找命令

通常,在行内快速移动光标时,倾向于用f{char}和F{char}; 当与d{motion}或c{motion}一起使用时,更倾向于使用t{char}及T{char}

查找命令可以与动作命令结合
This phrase gets to the point.
d/ge<CR> 从当前位置删除到ge处

用精确的文本对象选择选区

文本对象就是基于结构定义的文本区域

var tpl = [
'<a href="{url}">{title}</a>'
]

光标定位到url中
vi}
a"
i>
it
at
a]
在可视模式下观察这些文本对象选区的变化

vim的文本对象由两个字符组成,第一个字符永远是i或是a
i 选择分隔符内部的文本
a 选择包括分隔符在内的整个文本

vim的文本对象分为两类:
一类是操作分隔符的文本对象,如 i) i" it
另一类是操作文本块,如单词,句子和段落
iw aw 当前单词
iW aW 当前字串
is as 当前句子
ip ap 当前段落

设置位置标记

m{a-zA-Z}会用选定的字母标记当前光标所在位置
小写位置标记只在每个缓冲区局部可见
大写位置标记则全局可见
~{mark}跳转到标记位置

% 在匹配括号间跳转

surround插件的使用
New York 加上双引号
"New York"
可视模式选中内容后(vee),执行 S"
将 "New York" 修改为 [New York]
光标进入文本中,执行 cs"]

在文件间跳转

任何改变当前窗口中活动文件的命令,都可以被称为跳转命令,vim会把执行跳转命令之前和之后的光标位置,记录到跳转列表中
面向句子的动作及面向段落的动作都算跳转,但面向字符及面向单词的动作则不算。
大范围的动作命令可能会被当作跳转,但小范围的动作命令只能算移动

'. 总是指向上次修改的位置
gi 回到上次退出插入模式的地方并进入插入模式(只在本缓冲区内)

xp 调换光标之后的两个字符

vim的删除、复制与粘贴命令都会用到众多寄存器中的某一个,通过给命令加"{register}前缀的方式指定要用的寄存器。若不指明,vim将默认使用无名寄存器
"ayiw
"bdd

0 复制专用寄存器,即仅当使用y{motion}命令时才会被赋值
yiw
jww
diw
"0p
尽管diw仍会覆盖无名寄存器,但不会波及复制专用寄存器
:reg 查看所有寄存器内容

黑洞寄存器:用下划线引用 "_d{motion}将删除文本且不保存任何副本

只读寄存器
"% 当前文件名
"# 轮换文件名
". 上次插入的文本
": 上次执行的Ex命令
"/ 上次查找的模式

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

推荐阅读更多精彩内容

  • 命令历史 以:和/开头的命令都有历史纪录,可以首先键入:或/然后按上下箭头来选择某个历史命令。 启动vim 在命令...
    im蚂蚁阅读 30,721评论 3 48
  • dpkg 学习 安装mysql apt-get install mysql-server-5.6 apt-get ...
    sharonji阅读 432评论 0 0
  • Vim几句话介绍Vim是Unix系统上的文本编辑软件(你该不会不知道什么是文本编辑软件吧!),在windows上也...
    何必遠方阅读 3,124评论 0 3
  • 时光是一条河,在涉水过河时我遇见你,过河之后就成了陌人,南辕北辙。 我们都是喜欢看忧伤的文字,喜欢在朦...
    湖泊上的鹿影阅读 106评论 0 0
  • 一、学经汇报: 学经日期:2017年4月10日 星期一 晴 宝贝年龄:8岁 学经周期:3年 学经人员:茹茹 茹爸...
    悦2017137阅读 392评论 0 2