5. Moving Around in Vim: Grown Up Steps
| 键 | 移动 (Motions) |
|---|---|
| b | 至当前词或前面词首 |
| e | 至当前词或后面词尾 |
| ctlr+d | 向下1/2屏 |
| ctlr+f | 向下1屏 |
| ctlr+u | 向上1/2屏 |
| ctlr+b | 向上1屏 |
| gg | 跳至文件开始 |
| G | 跳至文件结尾 |
| ^ | 当前行第一个非空白字符 |
| $ | 当前行最后一个非空白字符 |
| 0 | 行首 |
| 键 | 移动 (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 交换位置:h tabpage 了解tab页功能:tabnew filename 和 :tabe filename 打开新页:tabc 关闭当前页:qa 关闭所有页:qa! 强制关闭所有页:tabo 关闭所有其它页:tabn 下一页:tabp 前一页:tabs 列出所有页