Skip to content

Instantly share code, notes, and snippets.

@tuchangwei
Last active December 26, 2020 05:40
Show Gist options
  • Star 4 You must be signed in to star a gist
  • Fork 2 You must be signed in to fork a gist
  • Save tuchangwei/87aa7b7c483e4c49967b to your computer and use it in GitHub Desktop.
Save tuchangwei/87aa7b7c483e4c49967b to your computer and use it in GitHub Desktop.
1, 插入空行
新发现一个命令, 使用点(.)重复上一个命令,如果是编辑代码或其他文本,需要插入很多空行,
可以这样子:先用o打开一个空行,然后ESC,接着就可以用.来操作了。每一次点.会在当前行的下面打开一个空行,并且不会进入编辑模式。
2,
ddp 交换光标所在行和其下紧邻的一行。
3,
d$ 删除当前字符之后的所有字符(本行)
4,
% : 匹配括号移动,包括 (, {, [. (陈皓注:你需要把光标先移到括号上)
* 和 #: 匹配光标当前所在的单词,移动光标到下一个(或上一个)匹配单词(*是下一个,#是上一个)
5, 举个例子就是你想复制一段双引号包含的文本,你就可以这样干 v-a-"
区域选择 <action>a<object> 或 <action>i<object>
在visual 模式下,这些命令很强大,其命令格式为
<action>a<object> 和 <action>i<object>
action可以是任何的命令,如 d (删除), y (拷贝), v (可以视模式选择)。
object 可能是: w 一个单词, W 一个以空格为分隔的单词, s 一个句字, p 一个段落。也可以是一个特别的字符:"、 '、 )、 }、 ]。
假设你有一个字符串 (map (+) ("foo")).而光标键在第一个 o 的位置。
vi" → 会选择 foo.
va" → 会选择 "foo".
vi) → 会选择 "foo".
va) → 会选择("foo").
v2i) → 会选择 map (+) ("foo")
v2a) → 会选择 (map (+) ("foo"))
6,
块操作: <C-v>
块操作,典型的操作: 0 <C-v> <C-d> I-- [ESC]
^ → 到行头
<C-v> → 开始块操作
<C-d> → 向下移动 (你也可以使用hjkl来移动光标,或是使用%,或是别的)
I-- [ESC] → I是插入,插入“--”,按ESC键来为每一行生效。
7, 替换(substitute):
3,7 s/xxx/yyy 把三到七行的xxx换成yyy,如不指定行号,则替换下一个
8,复制粘贴
1:yiw,复制单词 A
2:viw,选中单词 B
3:p,粘贴
因为严格来说,yw 只有当当前光标处于单词的第一个字母时才是“复制整个单词”(包含末尾的空格)
,而 yiw 不管当前光标处于单词的哪个字母,都是复制整个单词(不包括末尾的空格)
9, 缩进
按v锁定后按=
0 → 到行头
^ → 到本行的第一个非blank字符
$ → 到行尾
g_ → 到本行最后一个不是blank字符的位置。
fa → 到下一个为a的字符处,你也可以fs到下一个为s的字符。
t, → 到逗号前的第一个字符。逗号可以变成其它字符。
3fa → 在当前行查找第三个出现的a。
F 和 T → 和 f 和 t 一样,只不过是相反方向。
更快
你一定要记住光标的移动,因为很多命令都可以和这些移动光标的命令连动。很多命令都可以如下来干:
<start position><command><end position>
例如 0y$ 命令意味着:
0 → 先到行头
y → 从这里开始拷贝
$ → 拷贝到本行最后一个字符
你可可以输入 ye,从当前位置拷贝到本单词的最后一个字符。
你也可以输入 y2/foo 来拷贝2个 “foo” 之间的字符串。
简单替换表达式
:[range]s/from/to/[flags]
range:搜索范围,如果没有指定范围,则作用于但前行。
:1,10s/from/to/ 表示在第1到第10行(包含第1,第10行)之间搜索替换;
:10s/from/to/ 表示只在第10行搜索替换;
:%s/from/to/ 表示在所有行中搜索替换;
1,$s/from/to/ 同上。
flags 有如下四个选项:
c confirm,每次替换前询问;
e error, 不显示错误;
g globle,不询问,整行替换。如果不加g选项,则只替换每行的第一个匹配到的字符串;
i ignore,忽略大小写。
这些选项可以合并使用,如cgi表示不区分大小写,整行替换,替换前询问。
Ctrl+u和Ctrl+d是上下翻半页
@Unlimitedjohn
Copy link

ddp如果写,删除此行,将下一行粘贴至此行,更好理解。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment