星期六, 十月 30, 2010

WRITING/TALK

Writing is the best way to talk without being interrupted

-- Jules Renard

星期六, 十月 23, 2010

VIM学习笔记 撤销 (Undo)

单线撤销

在Normal mode下使用u命令,或者在Command mode下使用:undo命令,可以撤销上一次的操作。

使用U命令,可以撤销所有针对当前行最近所做的修改。

Vim可以进行多次撤销,这个次数是由选项undolevels来指定的。例如我们可以使用以下命令,设置撤消次数为5000:

:set undolevels=5000

如果希望重做被撤销的操作,可以使用:redoCTRL-R命令。

分支撤销

以下述操作为例:新建文件并输入“大象”,然后在新的一行中输入“小牛”,返回Normal mode并按下u命令。这时输入“小牛”的操作被撤消,文件将只包含“大象”。接着输入“猩猩”,然后返回Normal mode并按下u命令,此时将撤消输入“猩猩”的操作,文件仍然只包含“大象”。所以你的“小牛”就再也找不回来了。而撤消分支(Undo branches)就可以解决这个问题。使用g-可以使文件重新包含入“大象”和“小牛”。此过程如下图所示:

Undo Branches

如果你先撤销了若干改变,然后又进行了一些其它的改变。此时,被撤销的改变就成为一个分支。我们可以使用:undolist命令查看修改的各个分支。

UndoBranch_list

  • "编号" 列是改变号。这个编号持续增加,用于标识特定可撤销的改变。
  • "改变" 列是根结点到此叶结点所需的改变数目。
  • "时间" 列是此改变发生的时间。

使用: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退回到指定时间后的文本状态

Ver: 1.1<上一篇 | 目录 下一篇>

星期三, 十月 20, 2010

MEMORY & BOOK

Never memorize what you can look up in books.

---Albert Einstein

星期二, 十月 19, 2010

VIM学习笔记 缩进 (Indent)

手动缩进

在Normal Mode下,命令>>将对当前行增加缩进,而命令<<则将对当前行减少缩进。我们可以在命令前使用数字,来指定命令作用的范围。例如以下命令,将减少5行的缩进:

5<<

如果代码没有正确排版,那么我们可以使用==命令来缩进当前行;也可以进入可视化模式并选择多行,然后使用=命令缩进选中的行。

Indent_SampleCode

通过与文本对象组合,使用以下命令可以缩进{}括号内的代码。

=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缩进结构

Ver: 1.1<上一篇 | 目录 下一篇>

星期三, 十月 13, 2010

VIM学习笔记 寄存器 (Registers)

将寄存器与各种删除、复制、粘贴命令组合使用,能够大大提高编辑文本的效率。

指定寄存器

在复制或删除文本时,可以使用"register命令将文本放入指定的寄存器中。例如以下命令,将复制的文本放到寄存器a中,同时文本也会被放入未命名寄存器中。

"ayy

如果再使用相应的大写字母来指定寄存器,那么会将当前行内容追加到寄存器a中,这时该寄存器中就有了两行文本。

"Ayy

查看寄存器

使用registers name命令,可以查看特定寄存器中的内容:

register_A

如果想要查看所有寄存中的内容,可以使用以下命令:

:registers

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

如果直接使用pP命令,而没有指明特定寄存器,那么将粘贴未命名寄存器中的内容。

使用以下命令,可以粘贴上次插入的文本,方便你录入重复的内容:

".P

如果要粘贴系统剪切板中的内容,在Insert mode下可以利用快捷键Shift+Ins,而在Normal mode下,可以使用以下命令:

"*p

Ver: 1.0<上一篇 | 目录 下一篇>

星期五, 十月 01, 2010

从数据到智慧 From Data To Wisdom

毫无疑问,我们已经生活在知识经济的环境当中。每时每刻,我们身边都充满了各种各样的数据。但只有将这些杂乱无章的数据,转换为信息和知识,才能帮助我们做出聪明的选择。可见知识是从数据到智慧划分为不同层次的,如下图所示。

从数据到智慧的层次

Knowledge Hierarchy

从数据到智慧的定义

-DefinitionExample
Wisdom
(智慧)
运用知识,产出渴望的成果。如何减少库存
Knowledge
(知识)
是用于生产的信息(有意义的信息)。信息经过加工处理,应用于生产才能转变成知识。库存过多
Information
(信息)
是以有意义的形式加以排列和处理的数据。(有意义的数据)资产负债表
Data
(数据)
是未经组织的数字、词语、声音和图像等。总帐交易记录

上表列示了从数据到智慧的定义和举例。通过日常凭证的录入,我们得到了总帐记录,这些数据是离散的和难以阅读的;经过格式化后,总帐记录以资产负债表的形式显示出来,变成了有意义的信息;管理人员通过学习和分析信息,发现企业的经营状况--库存过多,信息被应用于生产成为了知识;人们在不断学习和应用知识的过程中,也结合自己的认知和经验提高知识,久而久之便形成智慧--使你能够正确地判断当前的形势,并做出最佳的决策。

从数据到智慧的转换

From data to wisdom

数据智慧的过程需要坚持不懈地学习,这个过程不是一次性的,而且不断往复进行的。数据经常以文字图片等形式存在,属于典型的显性知识;经过分析处理后,数据被逐步提升为信息知识;直到最终成为根植为头脑之中的极为个性化的智慧,升华为隐性知识;隐性知识经过总结后,又会以文档等形式转换为显性知识。通过这个不断循环往复的显性知识和隐性知识的相互转换过程,知识得到了不断提升和进化,而个人和企业学习利用知识的能力也得到了提高。

从数据到智慧--既是互相区别、逐步提升的层次结构,也是互相渗透、循环往复的转换过程。