4. Interlude: The Joy of a Good Cheat Sheet
借助小抄可提升掌握vim效率。
键 | 移动 (Motions) |
---|---|
b | 至当前词或前面词首 |
e | 至当前词或后面词尾 |
ctlr+d | 向下1/2屏 |
ctlr+f | 向下1屏 |
ctlr+u | 向上1/2屏 |
ctlr+b | 向上1屏 |
gg | 跳至文件开始 |
G | 跳至文件结尾 |
^ | 当前行第一个非空白字符 |
$ | 当前行最后一个非空白字符 |
0 | 行首 |
键 | 命令 (Command) |
---|---|
d | delete |
c | change (delete and enter insert mode) |
y | yank (copy) |
u | undo |
p | put (paste) |
r | replace (with whatever character you press next) |
键 | 命令 (Command) |
---|---|
dd | to change an entire line |
cc | to delete an entire line |
yy | to yank an entire line |
C
removes the line from your cursor onward and puts you in insert mode
Y
yanks all the words from your cursor forward, and so forth.
场景:
写函数时,要将鼠标置于空行缩进处:
scope.awesome = function(arg){
};
一般做法:回车生成新行,再回去删除原行。
vim操作:cc
或C
,删除原有行并进入输入模式。
count + action
模式:3dw = dw + dw + dw
例外:12G
operator + count + motion
模式
d5l
the five characters to the right of the cursor make up a text object. Delete it.
d5j
the next five lines constitute a text object whose presence is no longer required.
快捷键 | 文本对象 (Text Object) |
---|---|
w | 从当前鼠标到词尾 |
W | 从当前鼠标到词尾(计入标点) |
’ ‘’ | 在引号中的字符串 |
l | 从当前鼠标到句尾 |
.
it repeats the last change you made to the text, but at your current position.
What is a “Change”?
A change is anything that alters the text between two normal mode commands.
Words 是被标点分离的词,WORDS是含标点的字符。
如: http://I.am.a.frog.com
是6个Word,是1个WORD
文本对象通常被特定字符包围:WORD被空白符包围;word被非字符包围;句子被句号或行结尾包围。
Who is John Galt?
鼠标在Galt
词上,则diw
删除该词,句子被修改为Who is John ?
,iw
意为inner of word
;若ciw
则替换该词。
若用a
,则daw
删除该词及其两边空白字符,句子被修改为Who is John?
。
“Hello there! (He| lied)”. Ted was always cheerful.
da(
删除括号中内容及括号变为:
“Hello there! |”. Ted was always cheerful.
闭合字符 | 含义 |
---|---|
{ | 圆括号之间内容 |
[ | 方括号之间内容 |
< | 尖括号之间内容 |
t | XML或HTML标签之间内容 |
5w
代表向右移动5个词,6j
代表向下移动6行。vim标签分为两类:小写标签和大写标签。小写标签为文件内指向,大写标签为文件件指向。
m
+ [字母]:在正常模式下操作,设定一个以字母为名字的标签。: + 命令符
的方式即进入命令模式标记待编辑文字的首尾。
v
进入逐字符可视模式V
进入逐行可视模式<ctrl>v
进入逐块可视模式。插件即一个函数、快捷键、脚本集合,使用vim更加好用。
$HOME/.vim
文件夹~/.vim/bundle
中:Helptags
一个vim命令包含:
根据不同场景,以上三项均是可选。
4j
数字+移动
4p
数字+操作
editing by motion
输入以下代码:
grunt.loadNpmTasks('grunt-contrib-jade');
grunt.loadNpmTasks('grunt-contrib-watch');
grunt.loadNpmTasks('grunt-contrib-sass');
grunt.loadNpmTasks('grunt-contrib-concat');
grunt.loadNpmTasks('grunt-contrib-less');
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-clean');
grunt.loadNpmTasks('grunt-contrib-copy');
最缺乏构思的方式:拷贝
稍构思方式:多拷贝
grunt.loadNpmTasks('grunt-contrib-');
7p
不可思议的方式:在开始输入前知道有多少拷贝
8i grunt.loadNpmTasks('grunt-contrib-');<enter><esc>
:set foldmethod=indent ”按同级内缩折叠
:set foldmethod=syntax “按语法规则折叠
zc
:折叠
zo
:打开折叠
注:vim没有针对python语法的折叠功能,需要安装插件,本人安装的是SimpylFold。
只有当以vim为主要开发工具时,才涉及到本节详细命令。故暂略去更多相关命令。
示例:
nmap ea 将e 映射为 ea,移至词尾并进入插入模式
设置新的引导键:
let mapleader=","
引导键+e 定义新功能:
nmap <Leader>e ea
在插入模式中,有时需要在不离开插入模式的情况下进行文本操作。这样可以提高编辑效率。
命令 | 结果 |
---|---|
<ctrl> w | 删除鼠标之前的词 |
<ctrl> u | 删除鼠标之前的行 |
<ctrl> t | 增加行缩进 |
<ctrl> d | 减少行缩进 |
<ctrl> n | 找到下一个补全建议 |
<ctrl> x | |
<ctrl> r | 插入寄取器内容,跟上一个寄取器名称 |
vim会描扫已输入的词,当你键入 <ctrl> n
时vim会提示可能的匹配供选择。
:h opening-windows
了解窗口操作:sp
分成两个窗口<ctrl>w
开头的窗口命令<ctrl>w
+动作:操作窗口:h window-move-cursor
了解窗口跳转<ctrl>wk
跳到上面的窗口<ctrl>w 2k
跳到上两个窗口:h window-resize
了解窗口改变大小<ctrl>w 4+
增加4行<ctrl>w 4-
减小4行<ctrl>w >
变宽<ctrl>w <
变窄<ctrl>w =
退回修改:h window-moving
了解窗口移动<ctrl>w J
移动到底部<ctrl>w K
移动到顶部<ctrl>w K
移动到顶部<ctrl>w r
轮转窗口位置,上面的变为第二个,下面的变为第一个<ctrl>w R
轮转窗口位置,下面的变为第一个,第一个变为最后一个<ctrl>w x
交换位置