Vim的用户手册主要包含以下三个部分:



    Getting Started;

    Editing Effectively;

    Tuning Vim;

    分别代表基本编辑技巧,更优化的编辑技巧和优化Vim编辑器本身。



    先当然从Getting Started开始学习。



    About the manuals.

    这一节主要是对用户手册的基本介绍。其中说了,可以“从头到尾像读一本书那样来读用户手册”。这也是我准备要做的事。

最有用的是两点,一是用“CTRL-]” 和“CTRL-o”跳来跳去;二是vimtutor的使用。

The first steps in vim

    这一节提供了编辑文件的基本信息。是以后章节的基础。除去和vimtutor重复的内容,基本知识如下:

    vim中~代表不存在此行。

    普通模式和插入模式。(当不知道在哪个模式时,就多按几次esc回到插入 模式)

    vim中方向键的选择是出于按键最快捷的考虑。

    J可以将两行合行(join?).

    第二次U命令会取消前一次U命令的结果。

    多种插入方式:i, a, o, O。

    ZZ命令可以推出vim。

    :e!命令可以不保存修改,继续编辑。

    :help :help 关于如何获取帮助的帮助。但这个帮助比较复杂,我觉得这一节中Finding help的内容就完全足够了。

Moving around.

    这一节主要讲怎样移动光标。移动光标是编辑文本时最频繁的操作,所以移动光标的速度很大程度上决定了编辑效率。

    跨单词移动:w,b,e,ge。

    用w和b跨段落移动比用l和k快得多。

    跨句子移动:$, ^, 0 。

    重要:单字符搜索命令,f,F,t, T。

    %用于括号匹配(形象地理解为两个0通过斜杠匹配起来)。

    gg回到文件第一行。

    当前页面的移动:H(home),M(middle),L(last)。

    打开行标号:set number。

    有用的命令zz,将光标行置于页面中间。

    使用*和#快捷搜索。

    使用\<和\>来搜索完整单词。

    使用:scriptnames命令来找到配置脚本的实际位置。

    用于搜索匹配的简单正则表达式:

        ^表示句首,$表示句尾。

        .用于匹配任意字符。

        想搜索. 要使用转义符\。

    使用''跳回,或者使用CTRL-O,CTRL-I跳转。(O代表older,I只是因为在O旁边)

    mark(m):使用自己的标记。

    特殊标记:', ", [, ]。

Making small changes.

    此节主要讲修改和移动文本的基本方法。包含三个重要概念:操作符和运动符,可视模式和文本对象。

    exclusive和inclusive的区别。

    operator-motion模式。

    c:change, 与d类似,但会进入插入模式。

    cw的例外:There is a saying that for every problem there is an answer that is simple, clear and wrong.

    单字母命令:x--dl, X--dh, D--d$, C--c$, s--cl, S--cc 。

    最简单但有力的vim命令 . 。

    使用v和V进入可视模式。

    使用CTRL-v进入可视块模式。

    可视模式下的o和O命令: o for other end。

    P 命令,粘贴在光标前或光标上。

    xp快速修改“teh”这一类的问题。

    y命令,用yank代替copy。

    剪切板:用"*yy 和"*p来实现全局的 复制和粘贴。

    文本对象 :aw(A Word), is(Inner Sentence), as(A Sentence)。

    R进入替换模式。

    用~来改变大小写。

    I 和 A, 句首插入和句尾插入。

Set your settings.

    这一节介绍了最基本的优化vim和自定义偏好的方法,包括修改vimrc文件,增加插件和定义自己的宏。

    :version命令可以查看vimrc文件的基本信息。

    $VIMRUNTIME/vimrc_example.vim提供了一个简单的vimrc文件样版。

    filetype plugin indent on : 自动辨别文件类型,插件和缩进。

    映射可以将一系列的vim命令绑定到一个按键上。

    一个简单的映射:map<F5> i{<Esc>ea}<Esc> 。

    常用反斜杠\来定义映射 。

    vim插件只是一个启动时自动加载的vim脚本。

    使用:helptags 命令将一个脚本的帮助文档加入到本地帮助文档中。

    :set iskeyword& 可以将选项置回为默认值。

    :set cmdheight=3 可以控制命令行高度。

Using syntax highlighting.

    这一节主要将怎样使用色彩来使文本更生动,并且提高工作速度。

    使用:syntax enable来开启色彩功能,例如注释是蓝色,关键字是褐色,字符串红色等。

    可用的文件类型参见$VIMRUNTIME/syntax。

    使用:syntax reset来让颜色恢复到默认值。

    使用:colorsheme evening来选择其他颜色策略,所有颜色策略参见$VIMRUNTIME/colors。

    使用:runtime syntax/colortest.vim来检测常用颜色组合的效果。

    使用:TOhtml来将文件转换成HTML格式。

    关于颜色的更多内容参见usr_44.txt 和syntax的帮助内容。

Editing more than one file.

    这一节主要讲如何同时在一系列文件上工作,并做跳转和复制。

    使用:edit filename, vim会关闭当前文件开启一个新的。

    使用vim fileone filetwo filethree来编辑多个文件。

    使用:next,:next!,:wnext来在文件间跳转。

    使用:args来看文件列表。

    使用:set autowrite和:set noautowrite。

    使用:args filefour filefive filesix来重定义文件列表。

    使用CTRL-^在两个文件间切换。

    ‘“可以回到上次光标停留的地方。

    ’.可以回到上次修改过的地方。

    小写字母是文件局部话的标签,大写字母则是全局标签。

    使用:marks M来查看M标签的位置。

    :set patchmode=.orig 来保存原文件。(对写代码很有用)

    寄存器是vim存储文本的地方,常使用a-z编号的寄存器。

    "fyas代表向f寄存器中存储一个句子。

    使用"fp来粘贴。

    使用:write >> logfile 将文本加入到另一个文件后面。

    vim -R file 可以用只读模式打开文件。

    vim -M file 可以用更严格的只读模式打开文件。

    使用:saveas命令和:file命令。

    Splitting windows.

    这一节将的是分割窗口来同时编辑不同文件或同一文件的不同位置。

    最简单的分割窗口命令:split。

    CTRL-W w 命令用来在窗口间跳转,:close命令关闭窗口。

    特殊的,使用:only来关闭除当前窗口外的所有窗口。

    使用:split filename或者:new来分割窗口并编辑其它文件。

    在vim中,调整窗口大小是一个特殊动作:使用鼠标比使用键盘方便得多。

    使用:vsplit可以垂直分割窗口。(类似的:vnew也可用)

    在窗口间移动和在文本中移动类似,只是要加上CTRL-W。

    使用CTRL-W K可以将窗口移动到顶部(其它三个方向也类似)。

    使用:qall或者:wall等对所有窗口进行操作。

    vim -o one.txt two.txt three.txt或者:all命令的使用。

    vimdiff main.c~ main.c 用来比较不同的文件。

    使用:edit main.c 和:vertical diffsplit main.c~ 可以实现同样的效果。

    使用:edit main.c 和:vertical diffpatch main.c.diff来开启比较模式。

    使用]c 和[c在changes之间跳转。

    :diffupdate , dp(diff put)和do(diff obtain)。

    :tabedit filename和:tab split。
 
    Using the GUI

    这一节主要介绍vim的图形界面可以提供的额外功能。

    标题栏符号的意义:-不可修改,+包含变化,=只读,=+只读并包含变化。

    移除Toolbar,在vimrc文件中添加 :set guioptions-=T。

    使用:behave xterm 或者:behave mswin 来修改鼠标的工作方式。

    可优化的鼠标项: mouse, mousemodel, mousetime, mousehide, selectmode。

    同时使用"current selection"和"real clipboard"来优化编辑效率。

    "*寄存器代表current selection。

    "+寄存器代表real clipboard。

    Select mode:类似Visual mode,区别是选择模式下输入字符会替换已选字符。

    使用:set selectmode+=mouse来开启选择模式, 此时可用SHIFT+方向键移动光标。
 
    Making big changes.

    这一节讲大规模更改文本的方法,主要是在可视模式下的操作和使用外部程序完成复杂操作。

    录制命令的三个步骤:start recording-q{register},type your commands,finish recording-press q。

    使用命令@{register}执行录制好的宏。

    使用命令回放和使用.的区别:可重复多命令,有a-z这26个寄存器可用。

    修改寄存器n中错误命令的技巧:

        G        Go to the end of the file.

        o<Esc>        Create an empty line.

        "np        Put the text from the n register.

        {edits}         Change the commands that were wrong.

        0        Go to the start of the line.

        "ny$        Yank the corrected commands into the n register.

        dd        Delete the scratch line.

    使用q+大写字母,代表在寄存器中增加命令。

    替换命令 :[range]substitute/from/to/[flags], 例如:%s/old/new/g (g for global and c for confirm)。

    使用:.write otherfile写入单行文本。(. for current line and $ for the last line)

    替换单个章节 :?^Chapter?,/^Chapter/s=grey=gray=g。

    使用标记来描述范围,mt,mb,:'t,'b。

更有力的命令:global, 形式如下:[range]g/{pattern}/{command}。

块可视模式下,使用I和A插入。

    块可视模式下,使用c和C删除块同时插入字符串。

    块可视模式下,使用~,U和u进行大小写转换。

    块左右移动,使用>和<, 用:set shiftwidth=4进行设置。

    使用:0read patch,将patch文件写入文件首行。

    使用:.,$write tempo,将光标到文件结束的内容写入tempo中。

    使用>>来增加文件内容而不是擦除重写。

    gqap调整当前段落显示格式。

    全行大写gUU(gugu的简化形式)。

    使用外部程序,使用命令"!{motion}{program}"。

    例如!5Gsort<Enter>, !!date<Enter>。

    使用:read !dir读取dir命令的输出。

    使用:write !wc将单词数量写入文件中(Unix命令 count words)。

    CTRL-L, redraw the screen。

Recovering from a crash.

    这一节主要介绍在电脑崩溃的情况下如何恢复以前的工作。

    最基本的恢复手段:vim -r help.txt。

    此时可以用Vimdiff来比较恢复后的文件和恢复前的文件:

       :write help.txt.recovered

       :edit #

       :diffsp help.txt

    在没有文件名的情况下编辑时,在正确目录下执行vim -r ""。

    在合适的目录下使用vim -r查找swap文件。

    使用特定的swap文件 vim -r .help.txt.swp。

    swap文件的命名规则:*.s[uvw][a-z]。

swap文件存在的情况下的提醒:O,E,R,Q, A, D。

Clever tricks.

    这一节主要介绍如何将多个命令结合起来使用。

    命令:%s/\<four\>/4/gc, 全文精准替换单词four,并每次提示。

    C++文件的方法名重构:

        vim *.cpp

        qq

        :%s/\<oldFunctionName\>/newFunctionName/g

        :wnext

        q

        999@q

    为避免不含有oldFunctionName的文件造成错误,使用

        :%s/\<oldFunctionName\>/newFunctionName/ge

    使用:%s/\([^,]*\),\(.*\)/\2 \1/来将Doe, John替换成John。

举例,Makefile排序:

        /^OBJS    (找到以OBJS开头的一句话)

        j    (移到下一行)

        :.,/^$/-1!sort    (从当前行到下方第一个空行之前,排序)

    反转所有行序 :g/^/m 0。

    反转从标签t到当前行的行序 "mt", :'t+1,.g/^/m 't。

    计算文件字数 g CTRL-G。

    删除每行末尾的空格和制表符 :%s/\s\+$//。

    编辑所有带有"frame_counter"单词的c文件 vim 'grep -l frame_counter *.c'。

    使用:grep frame_counter *.c,加上:cnext, :cprev, :clist。

vim编辑器的用户手册的第一部分终于看完一遍了,虽然只是beginner级别的,但对我来说,内容已经不少,需要花一段时间好好的消化一下了。所以,接下来,不准备立刻开始学习用户手册的第二和第三部分,而是在实践中逐渐熟练掌握学过的vim编辑方法,并积累更多有用的vim编辑技巧。

    近期来讲,并不准备用vim来代替IDE的功能,一方面我的掌握程度还远远不够。另一方面,每一个工具都有其最高效的作用域,我认为如果将vim和eclipse结合起来使用,工作效率会更高。

    就我这样半吊子的英语水平,看vim用户手册居然非常流利,几乎没有什么生僻的单词和难以理解的句子。这充分说明了作者将复杂的事情变简单的能力。在我们平时工作中,也要有这种能力,毕竟,不能将一件事向60岁的文盲老太太解释清楚,就不能说你充分理解了这件事。

学习使用Vim(二)——User Manuals, Getting Started的更多相关文章

  1. 学习使用Vim(一)

    今天下定决心要逐渐脱离IDE的"comfortable zone",学习使用Vim.以前偶尔使用Vim的经历都是很痛苦的,觉得各种不方便和命令复杂难懂.但既然那么多书都推荐使用Vi ...

  2. deepin linux 学习笔记(二)——文本编辑器

    目录 deepin linux 学习笔记(二)--文本编辑器 前言 nano 小巧的命令行编辑器 通用 编辑 定位 排版 配置 vim 思路独特的超级编辑器 命令模式 插入模式 底线模式(末行模式) ...

  3. 我的MYSQL学习心得(二) 数据类型宽度

    我的MYSQL学习心得(二) 数据类型宽度 我的MYSQL学习心得(一) 简单语法 我的MYSQL学习心得(三) 查看字段长度 我的MYSQL学习心得(四) 数据类型 我的MYSQL学习心得(五) 运 ...

  4. 学习javascript数据结构(二)——链表

    前言 人生总是直向前行走,从不留下什么. 原文地址:学习javascript数据结构(二)--链表 博主博客地址:Damonare的个人博客 正文 链表简介 上一篇博客-学习javascript数据结 ...

  5. Linux学习之CentOS(二十二)--单用户模式下修改Root用户的密码

    在上一篇随笔里面详细讲解了Linux系统的启动过程 (Linux学习之CentOS(二十一)--Linux系统启动详解),我们知道Linux系统的启动级别一共有6种级别,通过 /etc/inittab ...

  6. 《Java编程思想》学习笔记(二)——类加载及执行顺序

    <Java编程思想>学习笔记(二)--类加载及执行顺序 (这是很久之前写的,保存在印象笔记上,今天写在博客上.) 今天看Java编程思想,看到这样一道代码 //: OrderOfIniti ...

  7. 小菜学习设计模式(二)—单例(Singleton)模式

    前言 设计模式目录: 小菜学习设计模式(一)—模板方法(Template)模式 小菜学习设计模式(二)—单例(Singleton)模式 小菜学习设计模式(三)—工厂方法(Factory Method) ...

  8. JavaScript学习总结(二)数组和对象部分

    pt学习总结(二)数组和对象部分 2016-09-16    分类:WEB开发.编程开发.首页精华暂无人评论     来源:trigkit4 分享到:更多1 对象部分 Object类型 Object  ...

  9. MATLAB地图工具箱学习总结(二)大圆和恒向线

    MATLAB地图工具箱学习总结(二)大圆和恒向线 今天要和大家谈一谈大圆.恒向线航道的画法.还是先从案例开始说起,再分别介绍相关的函数. 1                    作业案例:地图投影作 ...

随机推荐

  1. Javascript的块级作用域

      一.块级作用域的说明 在学习JavaScript的变量作用域之前,我们应当明确几点: a.JavaScript的变量作用域是基于其特有的作用域链的. b.JavaScript没有块级作用域. c. ...

  2. Access restriction: The type * is not accessible due to restrict,报错问题

    解决方案1: Eclipse 默认把这些受访问限制的API设成了ERROR.  Windows -> Preferences -> Java -> Compiler -> Er ...

  3. .NET踩坑记录【不断更新】

    NET 4.0 Tasks 使用 ThreadPool 可设置最大并发级别. 多个WebClient多线程下载受System.Net.ServicePointManager.DefaultConnec ...

  4. DTO学习系列之AutoMapper(二)

    本篇目录: Flattening-复杂到简单 Projection-简单到复杂 Configuration Validation-配置验证 Lists and Array-集合和数组 Nested m ...

  5. UWP开发小记

    针对个人的上一篇文章中提到的遇到的几个问题,做一下个人解答 DLL部署的问题,可以将DLL添加到工程中,属性中设置content为true,这样,部署目录下就会有这个文件. 需要说明的是,这个文件确实 ...

  6. JSP学习笔记 - 源码 -- JSP Custom Tags -- JSP自定义标记

    NetBeans 项目demo下载地址>>  http://files.cnblogs.com/files/AndrewXu/JSPCustomTags.zip

  7. PHP 中数组函数 isset 效率比 array_key_exists 更高

    PHP 中数组函数 isset 效率比 array_key_exists 更高 PHP 浏览:4194 2014年04月05日 isset 和 array_key_exists 函数都可以用来测试数组 ...

  8. C++ crash 堆栈信息获取(三篇文章)

    最近在做程序异常时堆栈信息获取相关工作,上一篇文章成功的在程序creash时写下了dump文件,而有些情况写dump文件是 不可以的,比如在jni开发时,C++只做底层处理,而整个项目是android ...

  9. Linux中C/C++头文件一览

    1.Linux中一些头文件的作用: #include <assert.h>       //ANSI C.提供断言,assert(表达式) #include <glib.h>  ...

  10. 转:关于rename命令ubuntu下的用法

    下面是我的遭遇:上午想批量改几个文件的名字,觉得mv在批量方面不够方便,百度到了rename这个命令,原谅我吧,我总是在百度不到结果时才去看google,以后还是少去百度的好国内很多贴子都在说linu ...