第七章:加速

##习惯使用hjkl 抛弃方向键吧,事实证明,在vim中,使用hjkl移动更加高效,因为手不需要跑去摸方向键,一切操作都在某个范围内即可完成。 在普通模式,hjkl的定义是这样的 h 左 j 下 k 上 l 右 ##区分实际行与显示行 有时候,由于vim窗口的大小限制,一行的数据可能会被截断成两行显示,而我们在进行移动时,默认是按真实的行数来移动的,但是有时候只是想移动同一真实行的后半部分,我们可以使用gj和gk来进行移动。还有一些其他的快捷键,如下: 键值 作用 j 真实行下移 gj 显示行下移 k 真实行上移 gk 显示行上移 0 跳到真实行的第一个字符 g0 跳到显示行的第一个字符 ^ 跳到真实行第一个非空字符 g^ 跳到显示行第一个非空字符 $ 跳到真实行的最后一个字符 g$ 跳到显示行最后一个字符 如果想j来跳转显示行,可以这样配置 :::sh nnoremap k gk nnoremap gk k nnoremap j gj nnoremap gj j ##在单词间跳转 直接给出相关命令。 命令 作用 w 跳到下一单词的开头 b 跳到当前或之前单词的开头 e 跳到当前或下一单词的结尾 ge 跳到前一单词的结尾处 ##查找字母 如果在一行里直接跳到某个字母我们可以使用f{char},然后想跳到下一个,就可以使用;重复动作了。

May 30, 2013

第六章:多文件操作

##概念 vim可以同时操作多个文件,缓存列表让我们知道我们打开了什么文件。vim允许我们在同一个窗口中同时查看两个文件,或者以tab的形式来操作文件。我们需要知道如何利用好它。 ##用缓存列表跟踪打开的文件 我们可以在一个vim中打开多个文件,vim允许我们使用缓存列表来管理这些打开的文件 文件和缓存之间的关系 像其他编辑器一样,我们可以使用vim来读文件,编辑文件和存储文件。我们可能以为我们编辑的是文件本身,其实我们是在编辑vim在内存中的缓存,这个就是vim术语上的缓存。而文件是存储在硬盘上的。当我们用vim打开一个文件,文件里的内容会读入内存中,开始的时候,缓存和本地磁盘中的文件内容是一样的,但是随着我们的编辑,缓存中的内容就会和磁盘的内容有所不同。当我们想保存修改时,我们需要输入命令来把缓存中的文件写入磁盘,命令为:write或者是:w。 在打开多个文件后,我们可以使用:ls来查看我们究竟打开了哪些文件, 我们可以看到#和%,其中%表示正在屏幕显示的文件,#表示当你按下<C-^>时可以切换到的文件,+表示该文件已被修改,但是还没有被存储,也就是缓存和磁盘的文件不一样。 :bnext,这个命令是跳转到下一个缓存,也就是跳到下一个已打开的文件。 :bprev,跳到上一个已打开的文件 :bdelete N1 N2或者**:bd**,可以删除指定序号的缓存。 :w[rite],保存文件 :e[dit]!,重置文件 :qa[ll]!,不保存退出 :wa[ll],保存所有打开的文件 ##同屏显示多文件 之前说过vim可以在同一个屏幕显示多个文件,如何做到的,很简单,通过下面的命令就可以了。 命令 影响 <C-w>s 分裂本文件 <C-w>v 纵向分裂本文件 :sp[lit] {file} 分裂打开指定文件 :vsp[lit] {file} 纵向分裂打开指定文件 <C-w>w 在同屏文件件转移 <C-w>h 向左转移 <C-w>j 向下转移 <C-w>k 向上转移 <C-w>l 向下转移 :on[ly] <C-w>o 只保留本窗口 <C-w>= 等分所有窗口 <C-w>_ 最大化本地高度 <C-w> [N]<C-w>_ 设置高度为N [N]<C-w>

April 22, 2013

第五章:命令行模式

##一个笑话 有人说,想快速生成一串无序字符串,就让新手来关闭vim吧,-_-!!!。 的确,在一开始接触vim的时候我也不会关闭,只是简单地按叉叉了事,可是第二次打开该文本,却有提示,很是不爽。一切都只能怪自己无知了。 那么究竟如何才是正确的关闭vim呢?这个问题涉及到这篇文章要讨论的vim另一个经常要用到的模式–命令行模式。进命令行模式的方法是在普通模式下按:,没错,是冒号。你会看到光标跳到最下面,这就对了。 除了按冒号,还记得之前的用vim做计算机吗?在编辑模式按<C-r>=,还有就是普通模式按下/也算是特殊的命令行模式了,这个主要用来搜索文本用的。 在冒号下的命令行模式我们可以做什么吗?答案是我们可以做很多事情,你会发现这又是vim强大的另一个原因。现在我们看看下面这个表 命令 效果 :[range]delete [x] 删除指定的行 [放到寄存器x中] :[range]yank [x] 复制指定的行 [放到寄存器x中] :[line]put [x] 把寄存器x的内容放到指定的行后面 :[range]copy {address} 复制特定行到指定的地址 :[range]move {address} 移动特定的行到指定的地址后 :[range]join 合并特定的行 :[range]normal {commands} 在特定的行运行命令 :[range]substitute/{pattern}/{string}/[flags] 把指定行的pattern替换为string :[range]global/{pattern}/[cmd] 匹配pattern的行运行命令 可能你会有疑问,range是什么,address是什么? 好,让我们来看看。 range and address range是范围的意思,在这里的范围,可以是一行,例如12,可以是连续几行,例如12,18表示12到18行(中间用逗号隔开),也可以是.即当前行,又或者$最后行,具体可看表格。 符号 含义 1 文件的一行 $ 文件最后一行 0 文件第0行(虚拟的) . 当前光标行 ’m 标记为m的行 ‘< 选择模式的开始 ‘> 选择模式的结束 % 整个文件(相当于:1,$) ##使用:t和:m命令来复制和移动文本 :t相当于:copy,我们可是使用这个命令来复制。例如下面的文本 :::java Shopping list Hardware Store Buy new hammer Beauty Parlor Buy nail polish remover Buy nails 我们想把第六行复制到第二行下面,我们就使用这个命令:6t....

April 15, 2013

第四章:可视模式

##遇见可视模式 什么是可视模式,那是一种可以让你任意选择文本的模式。最其他编辑器中,我们可能很习惯地用鼠标选择一段文本,复制,粘贴。但是在vim中,你会看到选择文本,可以玩出很多花样。 怎么进入可是模式?我们可以在普通模式使用v进入,然后用h j k l来移动。然后可以用c来删除选择的文字并进入编辑模式,或者可以y来复制这一段文字,或者只是d来删除。 除了普通的v,还有其他的可视快捷键,分别如下: 命令 效果 v 字符选择模式 V 整行选择模式 <C-v> 列选择模式 gv 重选上次选过的字符 我们可以在这几种模式之间切换,只要在选择模式下直接按那种模式的快捷键就可以了。而且我们可以用o来切换光标的位置。 现在我们可以来实践一下,相关命令如下 :::java vbb o e ##可以的话请使用操作符 可视模式对于点操作有短板,这个短板可以使用操作符来解决。例子如下: 假设我们需要把标签里面的小写转为大写 :::java <a href="#">one</a> <a href="#">two</a> <a href="#">three</a> 我们可以使用vit来选择one这样的被标签包围的字符。详细可以使用:h it来看到其详细的介绍。 接着,我们可以使用U来把选中的小写变大写,就像下面的操作那样 :::java vit U j. j. 看到了吗,在大三行的three,执行.只是把三个字符变成了大写。 使用普通模式操作符 看来可视模式解决不了问题,这个时候我们可以使用普通模式的操作符来解决这个问题。 在普通模式,使用gU来把小写变成大写,结合it,就可以改变标签包围着的字符的大小了。 :::java gUit j. j. ##用列模式来格式化表格 列模式是我最喜欢的模式之一,这个模式估计其他编辑器很难模仿,就让我们来看看它可以做什么神奇的事情吧。 有下面一个表格,我们想把它变得好看一些,如何做? :::java Chapter Page Normal mode 15 Insert mode 31 Visual mode 44 可以使用下面的命令,看好了。 :::java <C-v>3j x... gv r| yyp Vr- 相信这里所有的命令都会用,但是将它们组合起来需要熟练和灵感了。...

April 11, 2013

第三章:vim-编辑模式

##编辑模式下的快速改正 当我们使用vim编写文章的时候难免会打错字,除了按下退格键,在编辑模式下,我们可以使用其他方式来快速改正错误。 盲打的意A思并不仅仅是不看键盘打字,而是用感觉去打字(你觉得我走火入魔了么-_-!)。当盲打的时候,手指的感觉会比眼接收信息的速度快。我们不希望这时候节奏被打断,但是错误是在所难免的,如何快速改正错误变得非常重要。 在vim里面,可能你知道,在编辑模式下,除了使用退格键删除正在编辑的字符,还可以退回到普通模式,改正错误,再回到编辑模式。但这两种方法都感觉不太快速,因为退格键离键盘有点远,而后一种模式感觉更慢了,但是不用怕,vim为我们提供一些在编辑模式下使用的快捷键。 按键 效果 <C-h> 删除一个字符(退格键) <C-w> 删除一个英文单词 <C-u> 删除直到行的开始 你可能会问,为什么是\<C-h\>,而不是其他快捷键。我觉得是因为在vim中我们使用hjkl来移动,而h是向左移动,用\<C-h\>作为快捷键是非常直观的。 这些快捷键不仅可以在vim中使用,在bash中同样有效。 ##返回普通模式 我们在普通模式的时间可能会多于在编辑模式的时间(编写文章的时候除外),如何快速在这两种模式之间切换变得很重要,我们除了使用Esc来退回到普通模式,vim还为我们提供了快捷键。 按键 效果 <Esc> 转到普通模式 <C-[> 转到普通模式 <C-o> 转到临时普通模式 我们看到有一种新的模式是临时普通模式,这是什么?在这种模式下我们可以使用单一的普通模式下的命令然后立即返回到编辑模式。这个功能有什么实际用处吗?举一个例子,在普通模式下,我们可以使用zz来使光标所在的行移动到屏幕的中间。当我们写文章的时候,我们想把正在编辑的底部的文章上移到屏幕中间,我们不需要打一大串\<CR\>,我们只需要输入\<C-o\>zz,不需要回到普通模式,不需要狂按Enter,我们的文章已经从底部移动到屏幕中央。 ##不退出编辑模式粘贴暂存区内容 现在有以下文本,我们想把第一行的Learning Vim,复制到第二行的尾部。 :::java Learning Vim,by Gavin Lin Read Gavin Lin's 我们可以这样做: :::java yt, jA<space> <C-r>0 .<Esc> 我们来看一下这些命令都干了些什么,首先yt,是复制当前光标直到遇到,,jA<space>是移动到下一行,编辑行尾,然后输入空格。\<C-r\>0是在编辑模式下粘贴暂存区0的内容。再输入句号退出。 ##编辑的时候计算 当我们编j辑的时候需要做些简单的运算,不需要切换到计算机,vim就可以帮助你。 只要在编辑模式输入<C-r>=,就可以使用vim的计算器并返回计算结果。 ##输入不常用的字符 如果我们想输入大写字母A,通常只是Shift + a,但如果你知道它的字符编码065,你就可以在编辑模式输入<C-v>065,我们怎么知道字符的编码?你可以在那个字符上输入ga命令。 如果想输入¿呢?可以使用<C-v>u00bf,我们看到这个字符是大于三位的。而且是十六进制。:h digraph-table。 但是毕竟上述的输入方式有些反人类了,我们还要去查找某些字符的编码。这里我们介绍一些简单的方式。例如我们想输入¿,我们只需键入<C-k>?I,如此类推,如果想输入¡,只要输入<C-k>!I,这些够方便了吧。如果我们想输入½之类的,只要输入<C-k>12,又是一个方便的操作。详情可查:h digraphs-default 。 ##用替换模式来覆盖已有字符 只要我们在普通模式按下R,就会进入替换模式,输入字符来替换现有字符,行的长度不变,只想替换一个字符的话可以使用r。 本章就到这里了。

April 5, 2013

第二章:vim安装与普通模式

##vim的安装 强烈推荐使用gvim而不是使用vim,因为gvim提供了比vim更丰富的功能,例如颜色和光标的表现。 ###安装依赖库 :::java sudo apt-get build-dep vim sudo apt-get install mercurial ###下载vim 源程序 :::java hg clone https://vim.googlecode.com/hg gvim cd gvim hg tags hg update [tags] ###配置与安装vim :::java ./configure \ --enable-multibyte \ --enable-perlinterp=yes \ --enable-pythoninterp=yes \ --enable-tclinterp \ --enable-rubyinterp \ --enable-cscope \ --enable-sniff \ --with-features=huge \ --enable-gui=gnome2 \ --with-compiledby=gavin make && sudo make install ###vim 插件和配置 可以查看我的配置,地址是:https://github.com/gavinlin/vim-conf ##普通模式 当我们使用命令gvim [file],来打开文件时,gvim是处于普通模式的。gvim基本上有三种常用的模式,普通模式,编辑模式和命令模式。 其他很多编辑器默认只有一种模式,就是编辑模式,可能很多人会奇怪,为什么vim要分这么多种模式,而且默认是普通模式,而不是常识中的编辑模式。其实因为普通模式实在太重要了,很多操作都可以在普通模式中完成,这也是vim不同于其他编辑器的魅力所在,越深入学习,我就越认同了这点。 ###undos vim里面的undo,也就是撤销操作,可以通过在普通模式键入u来执行。如何从其他模式进入普通模式,我们只要按下Esc就可以了,通常是你键盘的左上角。u的强大之处在于,你对文本做的所有修改,都可以通过这个命令来撤销。这是我们经常会用到的命令。虽然人生不可以重来,但代码可以。 ###组成可重复的变化 有一段英文文本,我们想删除最后一个词,光标停留在最后一个词的最后位置,如何做才能做到高效率的删除单词动作? :::java 例如我们要删除以下句子的最后一个单词。 The end is nigh 有三种方法,分别是...

April 4, 2013

第一章:vim思维

身边使用vim作为编辑器的同学比较少,非常可惜他们没用上这神器,现在我几乎所有的文本编辑都使用vim来完成了。 vim的魅力在于快捷键,插件只是锦上添花,要知道vim如何神奇,还需要从具体示例入手。 ##遇见点命令 .在vim命令模式是重复上一个动作的意思(看帮助:h .),实际中我们可以这样用。 我们想把这个 :::java Line one Line two Line three Line four 变成这样 :::java Line one Line two Line three Line four 使用的命令是 :::java >G j. j. . >G就是从光标到最后都增加一个tab,j是向下移动一格,.就是重复>G了。 ##拒绝重复 看到如下代码,如果要在最后加上;,你会怎样做? :::c int foo = 1; char * string = "hello" char bar = 'a' 或许你会$ a j ESC然后j $ .,直到所有修改完毕,但是有个更好的方法 :::java A; j. j. A的意思是移动到行尾然后编辑,代替了$+a,这样,只要我们移动下一行然后按下.,vim就会自动为我们在行的最后增加分号了。 这里列出一些二合一的命令,这些都是需要熟记和灵活运用的。 命令 相当于 C c$ s cl S ^C I ^i A $a o A<CR> O ko ##退一步海阔天空...

April 2, 2013