Writing is the best way to talk without being interrupted
-- Jules Renard
星期六, 十月 30, 2010
星期六, 十月 23, 2010
VIM学习笔记 撤销 (Undo)
单线撤销
在Normal mode下使用u
命令,或者在Command mode下使用:undo
命令,可以撤销上一次的操作。
使用U
命令,可以撤销所有针对当前行最近所做的修改。
Vim可以进行多次撤销,这个次数是由选项undolevels来指定的。例如我们可以使用以下命令,设置撤消次数为5000:
:set undolevels=5000
如果希望重做被撤销的操作,可以使用:redo
或CTRL-R
命令。
分支撤销
以下述操作为例:新建文件并输入“大象”,然后在新的一行中输入“小牛”,返回Normal mode并按下u
命令。这时输入“小牛”的操作被撤消,文件将只包含“大象”。接着输入“猩猩”,然后返回Normal mode并按下u
命令,此时将撤消输入“猩猩”的操作,文件仍然只包含“大象”。所以你的“小牛”就再也找不回来了。而撤消分支(Undo branches)就可以解决这个问题。使用g-
可以使文件重新包含入“大象”和“小牛”。此过程如下图所示:
如果你先撤销了若干改变,然后又进行了一些其它的改变。此时,被撤销的改变就成为一个分支。我们可以使用:undolist
命令查看修改的各个分支。
- "编号" 列是改变号。这个编号持续增加,用于标识特定可撤销的改变。
- "改变" 列是根结点到此叶结点所需的改变数目。
- "时间" 列是此改变发生的时间。
使用:undo
命令并指定编号做为参数,则能够撤销到某个分支。
通过在不同的撤消分支间跳转,使用g-
命令能够回到较早的文本状态;而g+
命令则返回较新的文本状态。
我们还可以根据时间撤消操作:使用:earlier 10m
命令退回到10分钟前的文本状态。也可以用:later 5s
命令跳转到5秒以后的编辑状态。命令参数中的"s"代表秒,"m"代表分钟,"h"代表小时。
使用:help undo-tree
和:help usr_32.txt
命令,可以查看撤消操作的帮助信息。
u | 撤消 |
:undo | |
CTRL-R | 重做 |
:redo | |
:undolist | 查看撤消分支 |
g- | 返回较早的文本状态 |
g+ | 返回较新的文本状态 |
:earlier | 退回到指定时间前的文本状态 |
:later | 退回到指定时间后的文本状态 |
星期三, 十月 20, 2010
星期二, 十月 19, 2010
VIM学习笔记 缩进 (Indent)
手动缩进
在Normal Mode下,命令>>
将对当前行增加缩进,而命令<<
则将对当前行减少缩进。我们可以在命令前使用数字,来指定命令作用的范围。例如以下命令,将减少5行的缩进:
5<<
如果代码没有正确排版,那么我们可以使用==
命令来缩进当前行;也可以进入可视化模式并选择多行,然后使用=
命令缩进选中的行。
通过与文本对象组合,使用以下命令可以缩进{}括号内的代码。
=a{
如果需要缩进整个文件内的代码,则可以使用以下命令:
gg=G
在Insert/Replace Mode下,Ctrl-Shift-t可以增加当前行的缩进,而Ctrl-Shift-d则可以减少当前行的缩进。使用0-Ctrl-Shift-d命令,将移除所有缩进。需要注意的是,当我们输入命令中的“0”时,Vim会认为我们要在文本中插入一个0,并在屏幕上显示输入的“0”;然后当我们执行命令0-Ctrl-Shift-d时,Vim就会意识到我们要做的是减少缩进,这时0会就会从屏幕上消失。
缩进宽度默认为8个空格。我们可以使用以下命令,来修改缩进宽度:
:set shiftwidth=4
通过以下设置,每次点击Tab键,将增加宽度为8列的Tab缩进。
:set tabstop=8
:set softtabstop=8
:set shiftwidth=8
:set noexpandtab
使用以下设置,每次点击Tab键,增加的缩进将被转化为4个空格。
:set tabstop=4
:set softtabstop=4
:set shiftwidth=4
:set expandtab
其中,expandtab选项,用来控制是否将Tab转换为空格。但是这个选项并不会改变已经存在的文本,如果需要应用此设置将所有Tab转换为空格,需要执行以下命令:
:retab!
自动缩进
在Vim中还可以进行自动缩进,主要有cindent、smartindent和autoindent三种模式。
autoindent 在这种缩进形式中,新增加的行和前一行使用相同的缩进形式。可以使用以下命令,启用autoindent缩进形式。也可以点击==键进行缩进。
:set autoindent
smartindent 在这种缩进模式中,每一行都和前一行有相同的缩进量,同时这种缩进形式能正确的识别出花括号,当遇到右花括号(}),则取消缩进形式。此外还增加了识别C语言关键字的功能。如果一行是以#开头的,那么这种格式将会被特殊对待而不采用缩进格式。可以使用以下命令,启用smartindent缩进结构:
:set smartindent
cindent Vim可以很好的识别出C和Java等结构化程序设计语言,并且能用C语言的缩进格式来处理程序的缩进结构。可以使用以下命令,启用cindent缩进结构:
:set cindent
>> | 增加缩进 |
Ctrl-Shift-t | |
<< | 减少缩进 |
Ctrl-Shift-d | |
:set shiftwidth=n | 设置缩进宽度 |
:set cindent | 启用cindent缩进结构 |
:set autoindent | 启用autoindent缩进结构 |
:set smartindent | 启用smartindent缩进结构 |
星期三, 十月 13, 2010
VIM学习笔记 寄存器 (Registers)
将寄存器与各种删除、复制、粘贴命令组合使用,能够大大提高编辑文本的效率。
指定寄存器
在复制或删除文本时,可以使用"register
命令将文本放入指定的寄存器中。例如以下命令,将复制的文本放到寄存器a中,同时文本也会被放入未命名寄存器中。
"ayy
如果再使用相应的大写字母来指定寄存器,那么会将当前行内容追加到寄存器a中,这时该寄存器中就有了两行文本。
"Ayy
查看寄存器
使用registers name
命令,可以查看特定寄存器中的内容:
如果想要查看所有寄存中的内容,可以使用以下命令:
:registers
寄存器类别
寄存器可以分为以下9类:
类别 | 符号 | 描述 |
---|---|---|
未命名寄存器 | " | 上一次复制或删除的文本 |
数字寄存器 | 0-9 | 文本删除历史 |
短删除寄存器 | - | 删除少于一行的文本 |
命名寄存器 | a-z,A-Z | 存放文本 |
只读寄存器 | % | 当前文件的名字 |
# | 交替文件的名字 | |
. | 上一次插入的文本 | |
: | 上一次执行的命令 | |
表达式寄存器 | = | 返回表达式结果 |
选择和拖拽寄存器 | * | 系统剪切板 |
+ | 系统剪切板(X11) | |
~ | 拖拽的文本 | |
黑洞寄存器 | _ | 永久删除的文本 |
搜索模式寄存器 | / | 搜索模式 |
未命名寄存器(The Unnamed Register) 当使用y命令复制文本,或使用d、c、s、x命令删除文本时,文本将自动被放入""未命名寄存器。即使你在复制或删除文本时,已经指定了寄存器(例如使用"xdd命令),这些文本也将会被同时放入"x和""寄存器。
数字寄存器(The Numbered Registers) "0始终存放最近删除的文本。"1也包含上次删除的文本。区别在于:"0不断被删除的文本所覆盖;而如果删除文本时,指定了寄存器或者文本小于一行,那么"1将不会被更新。 数字寄存器1-9可以看作是删除历史, 你可以从中找到早先删除的文本。比如你使用了三次dd命令,那么这三行文本被分别存放在寄存器1,2,3中,可以通过命令"1P
,"2P
,"3P
将这些文本再粘贴回来。
短删除寄存器(The Small Delete Register) 当删除少于一行的文本时,除非指定了某个寄存器,否则这些内容将会被放入"-短删除寄存器中。
命名寄存器(The Named Registers) 当文本被放入以小写字母命名的寄存器(例如"a)时,该寄存器原有的内容将被覆盖;而使用以大写字母命名的寄存器(例如"A)时,将会把文本追加到原有内容之后。
只读寄存器(The Read-Only Registers) 你只能从4个只读寄存器中粘贴内容,而不能放入文本。"%包含当前文件名;"#包含交替文件名;".包含最近插入的文本;":包含上次执行的命令行。
表达式寄存器(The Expression Register) 当我们输入"=,就会在Vim底部显示一个以“=”开始的提示行,可以在这里输入表达式并按回车键确认。随后使用命令p
将表达式的结果粘贴到文本中。例如要在文本中插入38*56的值,首先进入命令模式,输入"=
,在屏幕底部的提示行中输入“38*56”并按回车,然后输入命令p,这样就可以将计算结果插入文本中了。在表达式寄存器中,不仅可以使用通常的算术运算符,还可以使用Vim特定的函数和运算符。例如通过表达式寄存器来得到环境变量的值(例如"=$HOME)。如果没有输入任何表达式而直接按回车键,那么Vim将执行最近使用过的表达式。
选择和拖拽寄存器(The Selection and Drop Registers) 有3个寄存器用于保存选中的文本:"*用于访问系统剪切板。在Windows下,"*和"+相同;在Linux下,"+包含选中的文本,"*包含复制的文本。使用"+y
命令,可以将当前选中的文文本复制到系统剪切板中。而"+p
命令,则可以粘贴系统剪切板中的内容。通过剪切板寄存器,能够在不同的Vim编辑器或者是其他应用程序之间,进行文本交换。"~包含上次从其它应用程序拖拽到Gvim中的文本。
黑洞寄存器(The Black Hole Register) 任何放入"_中的文本都将不复存在。如果想要永久删除某些文本而不是将他放入1-9中的某个寄存中,就可以使用黑洞寄存器。例如:命令dd将删除一行文本并将其放入寄存器1中;而命令"_dd
则将该行文本放入黑洞寄存器中,这些文本也就会永久消失了,而寄存器1中的文本会保持不变。
搜索模式寄存器(Search Pattern Register) 当你通过/命令进行搜索时,所使用的模式将自动被放入"/寄存器。
粘贴寄存器
命令:put会将寄存中的内容粘贴到指定的文本行后面。使用以下命令,可以将寄存器中的内容粘贴到第五行的后面:
:5put a
如果要将文本放在这一行的前面,可以用以下命令:
:5put! a
你也可以使用p命令,将x寄存中的文本粘贴到光标之后:
"xp
而P命令,则将x寄存中的文本粘贴到光标之前:
"xP
如果直接使用p
或P
命令,而没有指明特定寄存器,那么将粘贴未命名寄存器中的内容。
使用以下命令,可以粘贴上次插入的文本,方便你录入重复的内容:
".P
如果要粘贴系统剪切板中的内容,在Insert mode下可以利用快捷键Shift+Ins,而在Normal mode下,可以使用以下命令:
"*p
星期五, 十月 01, 2010
从数据到智慧 From Data To Wisdom
毫无疑问,我们已经生活在知识经济的环境当中。每时每刻,我们身边都充满了各种各样的数据。但只有将这些杂乱无章的数据,转换为信息和知识,才能帮助我们做出聪明的选择。可见知识是从数据到智慧划分为不同层次的,如下图所示。
从数据到智慧的层次
从数据到智慧的定义
- | Definition | Example |
---|---|---|
Wisdom (智慧) | 运用知识,产出渴望的成果。 | 如何减少库存 |
Knowledge (知识) | 是用于生产的信息(有意义的信息)。信息经过加工处理,应用于生产才能转变成知识。 | 库存过多 |
Information (信息) | 是以有意义的形式加以排列和处理的数据。(有意义的数据) | 资产负债表 |
Data (数据) | 是未经组织的数字、词语、声音和图像等。 | 总帐交易记录 |
上表列示了从数据到智慧的定义和举例。通过日常凭证的录入,我们得到了总帐记录,这些数据是离散的和难以阅读的;经过格式化后,总帐记录以资产负债表的形式显示出来,变成了有意义的信息;管理人员通过学习和分析信息,发现企业的经营状况--库存过多,信息被应用于生产成为了知识;人们在不断学习和应用知识的过程中,也结合自己的认知和经验提高知识,久而久之便形成智慧--使你能够正确地判断当前的形势,并做出最佳的决策。
从数据到智慧的转换
从数据到智慧的过程需要坚持不懈地学习,这个过程不是一次性的,而且不断往复进行的。数据经常以文字图片等形式存在,属于典型的显性知识;经过分析处理后,数据被逐步提升为信息和知识;直到最终成为根植为头脑之中的极为个性化的智慧,升华为隐性知识;隐性知识经过总结后,又会以文档等形式转换为显性知识。通过这个不断循环往复的显性知识和隐性知识的相互转换过程,知识得到了不断提升和进化,而个人和企业学习利用知识的能力也得到了提高。
从数据到智慧--既是互相区别、逐步提升的层次结构,也是互相渗透、循环往复的转换过程。