Painless Vim

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会提示可能的匹配供选择。

返回

20. Vim Windows Are Not Microsoft Windows

  • :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 交换位置

返回

21. Tab Pages Are Not Browser Tabs

  • :h tabpage 了解tab页功能
  • :tabnew filename:tabe filename 打开新页
  • :tabc 关闭当前页
  • :qa 关闭所有页
  • :qa! 强制关闭所有页
  • :tabo 关闭所有其它页
  • :tabn 下一页
  • :tabp 前一页
  • :tabs 列出所有页

返回

22. Interlude: Reviewing Views

区分窗口缓冲文件的区别。

返回