第七章:加速

##习惯使用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 跳到前一单词的结尾处 ##查找字母 ...

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命令来复制和移动文本 ...

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. ##用列模式来格式化表格 ...

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的计算器并返回计算结果。 ...

April 5, 2013