这两天做了一个很繁琐的需求,简单的来说,就是把一个产品配置的复杂的excel表,转入为json, 然后再用 javascript 脚本拼接为对应 php 页面可执行代码。繁琐的是配置多且杂,并且产品的归类excel 转换为的 json 并不可用。于是我还需要在他们的excel表里,进行更改。其实这个工作应该做一个配置台,让产品去维护。 以后就不用开发手动维护这个配置表。
总之是提前做完了,虽然做的过程中, 不是怀着非常愉快的心情做的。晚上剩了点多的时间,把 vim 稍微进阶了一点。以前的基本命令都已经熟练使用了。现在总结下用的不是很熟的几个地方。
几个还没有用熟练的指令
cw
替换从光标所在位置后到一个单词结尾的字符, 不同于a,i,o
哦。
0,$,^,g_
的区别和联系。0,$
是到行头和行尾,^,g_
到非blank字符位置。
ctrl+r
和 u
, 因为 WebStorm 里这些都还可以用以前的 ctrl+z
之类的执行。所以这两个命令有点被我忽略了。其实应该改过来。
w
到下一个单词的开头。e
到下一个单词的结尾。如果你认为单词是由blank字符分隔符,那么你需要使用大写的E和W。
查找超能力
fa
到下一个为a的字符处,你也可以fs到下一个为s的字符。t,
到逗号前的第一个字符。逗号可以变成其它字符。3fa
在当前行查找第三个出现的a。F和T
和f和t
一样,只不过是相反方向。/pattern
搜索pattern
的字符串, 如果又多个,按n到下一个。t,
到逗号前的第一个字符。逗号可以变成其它字符。dt.
删除当前字符到.
为止的所有内容。
注意补充下normal
模式下按/
即可进入查找模式, n为下一个,N为上一个。如果是 /singer\c
代表查找singer,并且大小写不敏感。因为默认情况下,它是大小写敏感的。相应的,\C
代表大小写敏感。
你还可以在此模式下加入正则表达式,比如/inger$
,这时以inger
结尾的都会被查出来。
在normal
模式下的查找,还可以使用直接按*
,来查找当前光标所在的单词。这时候的查找的单词前后都是空白字符或者标点符号。例如当前为foo
, 可以匹配foo bar
中的foo
,但不可匹配foobar
中的foo
。经常用于查找函数。如果想要包含关系,使用g*
即可。
替换能力
刚刚提到了查找的能力,normal
下使用/
即可进入查找模式。替换模式则是使用:s
。具体情况如下:1
:{作用范围}s/{目标}/{替换}/{替换标志}
:%s/singer/author/g
会在全局范围(%
)查找singer
并替换为author
,所有出现都会被替换(g
)。如果使用:s/singer/author
则只会在当前行替换一个。
这里的作用范围可以总结如下:
- %全文查找, 如 :%s/singer/author/g
- 不填写默认当前行,如:s/singer/author/g
- :5,12s/singer/author/g, 第5-12行
- :.,+2s/singer/author/g, 当前行和接下来的2行。 注意
.
是当前行,,
是分隔符- :’<,’>s/singer/author/g把选区内的内容替换。注意下:在Visual模式下选择区域后输入
:
,Vim即可自动补全为:'<,'>
。WebStorm也会做同样的事情。
这里的替换标识可以总结如下代表:
%s/singer/author
, 空标识表示:只替换从光标位置开始,目标的第一次出现%s/singer/author/g
, global 表示全局i
表示大小写不敏感查找,I
表示大小写敏感:%s/singer/author/gc
c表示全局查找后替换需要被确认。它可能会弹出一句:Replace with author ? (y/n/…)之类的东西。
区域选则 <action>a<object>
以及 <action>i<object>
其实这个我已经很熟了,今天看到了别人的总结(注:下面的这段为引用内容,引用地址为:coolshell)。
action可以是任何的命令,如
d
(删除),y
(拷贝),v
(可以视模式选择)。object 可能是:
w
一个单词,W
一个以空格为分隔的单词,s
一个句字,p
一个段落。也可以是一个特别的字符:"、
'、
)、
}、
]。
a和i的区别也很好分。i不包括,a包括了。看下面这个例子。
假设你有一个字符串 (map (+) ("foo"))
.而光标键在第一个 o
的位置。
vi"
→ 会选择foo
.va"
→ 会选择"foo"
.vi)
→ 会选择"foo"
.va)
→ 会选择("foo")
.v2i)
→ 会选择map (+) ("foo")
v2a)
→ 会选择(map (+) ("foo"))
VIM 的Visual模式
vim 分为3中 visual 模式,分别是:
Visual 默认模式:
normal
下 ,按 v 进入 visual
默认模式。这个模式下可以 hjkl 进行各种上下移动。选中文本后,可以进行 y,d,p,^,$等操作。
Visual Line 模式
normal
下,按 V 进入 visual line
模式。 使用 j/k键可以选中一行或者多行。进行正行操作。
Visual Block 模式
按住 ctrl + v
, 进入 visual block
模式。此模式下,选中想要选中的内容(可以结合$^)。选中后,输入I,i,A,a,C,c
等操作,输入想要输入的内容。再按下Esc
键,即可全部行都有填入的内容。类似于 sublime。
注意 I,A,C 的区别,就跟他们原来的意思一样,比如I,A是插入,只是插入的地方可能不同。C是替换。
比如Ctrl+v jj$
到每一行行末,再I,填入;
,就可以几行一起填分好了。
Visual Block 模式下,还可以做下面这些事情:
- 可以结合
<>
进行移动。 - 使用
J
把选中的行连接起来变成 一行。 - 使用
=
自动给缩进。
这些功能都很好用。
总结
这里面的东西,有些大多我都用过,也知道。但是每次去用的时候有时候还要再去查下命令。怪不好的。总结下,以后忘记了就在博客里翻翻吧。开心。