Painless Vim

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

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

返回

23. How Vim Thinks

  • .swap文件的作用

返回

24. Visual (Mode) Basics

  • :h visual-mode 了解可视模式
  • :h characterwise-visual了解逐字可视模式
  • :h linewise-visual了解逐行可视模式
  • :h blockwise-visual了解块可视模式
  • 5vviw
  • 5VV5j

Common Visual Mode Commands

  • o 在可视模式中可切换跳至区域头尾,以改变选择区域
  • gv 重复上次选择

返回

25. Vim GUIs

  • .gvimrc 为图形窗口vim配置文件
  • :set guifont=Andale\ Mono:h14 配置字体

返回

26. Menus Everywhere!

跳远本章

返回

27. Literary Vim: Writing Prose in Vim

略过

返回

28. Conclusion

略过

返回