Painless Vim

Painless Vim是Nate Dickson所作Vim入门教程。本帖为该教程的笔记。

  1. 进入、退出、简易配置 (Get In, Get Out, Get Comfortable)
  2. 小步移动 (Moving Around in Vim: Baby Steps)
  3. 配置文件 (Your .vimrc File And You)
  4. 操作提示页 (Interlude: The Joy of a Good Cheat Sheet)
  5. 大步移动 (Moving Around in Vim: Grown Up Steps)
  6. 操作1:改变字词和句子 (Operators 1: Changing Letters and Lines)
  7. 多步操作 (Doing Things More Than Once)
  8. 凌波微步 (Moving Around in Vim: Dance Steps)
  9. 模式 (Modes at Last)
  10. 插件(Plugins)
  11. 操作:移动和改变一次完成 (Operators: Moving and Changing at the Same Time)
  12. 如何在不方弃的前提下稍稍退缩( Interlude: How to Back Off Without Giving Up)
  13. Registers: Clipboards as Far as the Eye Can See
  14. 文本折叠 (Text Origami)
  15. 搜索和发现(Searching and (More Importantly) Finding)
  16. 使用帮助系统 (Using Vim’s Help System)
  17. 以Vim速度操作 (Doing Things at Vim Speed)
  18. 映射按键 (Mapping Keys)
  19. 花式插入模式技巧 (Fancy Insert Mode Tricks)
  20. Vim窗口不是微软窗口 (Vim Windows Are Not Microsoft Windows)
  21. Tab页不是浏览器Tab页 (Tab Pages Are Not Browser Tabs)
  22. 回顾视口 (Interlude: Reviewing Views)
  23. Vim如何思考 (How Vim Thinks)
  24. 可视模式基础 (Visual (Mode) Basics)
  25. VIM窗口界面 (Vim GUIs)
  26. 四处皆为菜单 (Menus Everywhere!)
  27. Literary Vim: Writing Prose in Vim
  28. 结论 (Conclusion)

1. Get In, Get Out, Get Comfortable

  • 进入vim
  • :q\<enter> 退出vim
  • :synatx on 打开语法高亮

返回

2. Moving Around in Vim: Baby Steps

一步移动

  • h moves your cursor one space left
  • l moves your cursor one space right
  • k moves your cursor one line up
  • j moves your cursor one line down

编辑

  • i a A o进入插入模式 (insert mode)。
  • <esc> 退出插入模式,回到普通模式 (normal mode)。
  • :w 保存

TIMTOWTDI原则(读作Tim-Toady):

  • :q
  • :q!
  • :wq
  • ZZ: :wq
  • ZQ: :q!

Zoom!

  • zt
  • zb
  • zz

返回

3. Your .vimrc File And You

本章说明如何配置vim。vim的配置文件名为.vimrc,示例为:

set nocompatible 
syntax on
set nu
filetype indent plugin on
  • :so % 执行当前文件

返回

Picking a Color Scheme

  • 将颜色插件 Tomorrow-Night-Eighties.vim 拷贝到 .vim/colors 文件夹中
  • 编辑.vimrc文件:
     colorscheme Tomorrow-Night-Eighties
    

Using Keymaps to Get Unlost

将映身为一个动作。

nnoremap <silent> <F4> :set cursorline!<CR>

返回

4. Interlude: The Joy of a Good Cheat Sheet

借助小抄可提升掌握vim效率。

返回

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 行首

返回

6. Operators 1: Changing Letters and Lines

  • 本节关注:剪切 (cut / delete)、拷贝 (copy / yank)、粘帖( paste / put)。
命令 (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

To operate on a line from your cursor to the end you capitalize the command instead.

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.

How to Instantly Make Your Life Easier with cc (or C )

场景:

写函数时,要将鼠标置于空行缩进处:

scope.awesome = function(arg){

};

一般做法:回车生成新行,再回去删除原行。
vim操作:ccC,删除原有行并进入输入模式。

返回

7. Doing Things More Than Once

  • 本节关注:重复同一个动作。

Using Counts

count + action 模式:3dw = dw + dw + dw
例外:12G

Using Text Objects

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 从当前鼠标到句尾

Behold The All-Powerful Dot

. 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.

返回

8. Moving Around in Vim: Dance Steps

  • 本节关注:关于移动的更多方式

Words and WORDS

Words 是被标点分离的词,WORDS是含标点的字符。

如: http://I.am.a.frog.com 是6个Word,是1个WORD

Inner and All

文本对象通常被特定字符包围: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标签之间内容

Move by Counting

  • 5w代表向右移动5个词,6j代表向下移动6行。
  • 但重复数过多时,不如重复操作。

(Book)marks

vim标签分为两类:小写标签和大写标签。小写标签为文件内指向,大写标签为文件件指向。

  • m + [字母]:在正常模式下操作,设定一个以字母为名字的标签。
  • ` + [字母] : 跳至以字母为名的标签处。
  • ’ + [字母]:跳至以字母为名的标签外行首。

返回

9. Modes at Last

什么是模式

  • 模式改变了键盘行为。插入模式中,键入字符即将字符打印在屏幕上。在其它模式下,键入字符即是在输入命令。

正常模式(Normal Mode)

  • 正常模式的逻辑在于:大多数时候我们是在思考,而非输入。

插入模式(Insert Mode)

  • 插入模式下即自由输入。
  • +字母,插入模式命令。

命令模式 (Command Mode)

  • : + 命令符的方式即进入命令模式

可视模式 (Visual Mode)

标记待编辑文字的首尾。

  • v 进入逐字符可视模式
  • V 进入逐行可视模式
  • <ctrl>v 进入逐块可视模式。

返回

10. Plugins

插件是什么

插件即一个函数、快捷键、脚本集合,使用vim更加好用。

手工安装

  • 下载插件(.zip文件)
  • 解压文件并拷贝到$HOME/.vim文件夹
  • 重启vim

简易安装

Nate的偏好插件

额外找的插件

返回

11. Operators: Moving and Changing at the Same Time

一个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');
  • 最缺乏构思的方式:拷贝

    1. 先输入第一行
    2. 拷贝该行
    3. 编辑新行
  • 稍构思方式:多拷贝

    1. 输入 grunt.loadNpmTasks('grunt-contrib-');
    2. 7p
  • 不可思议的方式:在开始输入前知道有多少拷贝

    8i grunt.loadNpmTasks('grunt-contrib-');<enter><esc>
    

返回

12. Interlude: How to Back Off Without Giving Up

  • 用喜欢的编辑器替代,并采用方向键;
  • 在喜欢的编辑器中采用vim插件

返回

13. Registers: Clipboards as Far as the Eye Can See

返回

14. Text Origami. :h folding

:set foldmethod=indent  ”按同级内缩折叠
:set foldmethod=syntax  “按语法规则折叠

zc:折叠
zo:打开折叠

注:vim没有针对python语法的折叠功能,需要安装插件,本人安装的是SimpylFold

只有当以vim为主要开发工具时,才涉及到本节详细命令。故暂略去更多相关命令。

返回

15. Searching and (More Importantly) Finding

略过

返回

16. Using Vim’s Help System

  • :q退出帮助系统
  • <ctrl>] 链接跳转
  • <ctrl>w + hjkl 跳转窗口
  • :h 关键词 <ctrl>d 给出可能帮助主题

返回

17. Doing Things at Vim Speed

解释了相对于其它编辑器,vim胜出的原因在于:其将大部分操作限制在常用键区域完成。

返回

18. Mapping Keys

All the Key map Commands

  • nmap: 正常模式下映射
  • vmap: 可视模式下映射
  • imap: 插入模式下映射

示例:

nmap ea 将e 映射为 ea,移至词尾并进入插入模式

Take me to your Key!

设置新的引导键:

let mapleader=","

引导键+e 定义新功能:

nmap <Leader>e ea

返回

19. Fancy Insert Mode Tricks

在插入模式中,有时需要在不离开插入模式的情况下进行文本操作。这样可以提高编辑效率。

命令 结果
<ctrl> w 删除鼠标之前的词
<ctrl> u 删除鼠标之前的行
<ctrl> t 增加行缩进
<ctrl> d 减少行缩进
<ctrl> n 找到下一个补全建议
<ctrl> x
<ctrl> r 插入寄取器内容,跟上一个寄取器名称

补全

vim会描扫已输入的词,当你键入 <ctrl> n 时vim会提示可能的匹配供选择。

返回