Skip navigation.

极湖

无不用其“极”

Posts tagged with "Editor"

TextMate的Windows/Linux替代品?

关于编辑器的话题,总是会引起很多人的兴趣。

看了TextMate主页上的《Windows/Linux alternative?》这篇文章,下面有超过150条的评论(目前),通过这些评论,大体上可以看出当今主流编辑器的分布状况,还能发现不少好东西。没来得及把评论一一看完,打算有时间再去看。

几款仿TextMate的编辑器

,

没有Mac机器,因此没有用过TextMate,这个编辑器看起来有些诱人。

在网上找了一下Windows/Linux下的TextMate仿制品,记录几个网址于此:

Scribes
http://scribes.sourceforge.net/

E-TextEditor
http://www.e-texteditor.com/index.html

Intype
http://intype.info/home/

还有这篇Vim, for TextMate fans,也值得一读。

vim新包装:cream

, ,

一个好的编辑器,能很大程度提高人们的工作效率。对于从事编写代码工作的人来说,一个得心应手的编辑器,更是必不可少。

今天看了一篇文章:《我使用过的文本编辑器及其历程》。其中提到的编辑器,大多我也用过,和作者一样,我最常用的编辑器也是 UltraEditEmEditor

今天又发现一个叫 cream 的“编辑器”,似乎不错,就下载并安装试用。装好运行,才发现这只不过是vim的一个新包装,包装的内容包括菜单、工具条、状态栏等界面元素,基本的编辑方式和快捷键则尽量向Windows的传统习惯靠拢。

看了一下 cream 的启动命令:

"C:\Program Files\Vim\vim70\gvim.exe" "-u" "C:\Program Files\vim\vim70\cream\creamrc"

不难发现,这不过是给gvim作了一些脚本,定制了gvim的界面以及行为方式,用gvim实现“Windows方式”的编辑。

对于没有用过vim的人,用cream或许会比较顺手。而对于早已习惯了vim的“模式编辑”的人,很可能适应不了cream的的编辑方式,因为你会发现i、a、c、o、dd、yy、p等命令已经失效,/、?、:等符号也不再听话。

实际上,cream证明了vim是一个非常优秀的编辑器,可定制性很强,在Windows下,vim照样有潜力可挖掘。

新做的vim配置文件

,

" vim设置文件 ( .vimrc 或 _vimrc )
"-----------------------------------------------------------------------------
" 字符编码相关
"
" 多字节编码设置,必须放在.vimrc顶部
"
if has("multi_byte")
  " When 'fileencodings' starts with 'ucs-bom', don't do this manually
  "set bomb
  set fileencodings=ucs-bom,chinese,taiwan,japan,korea,utf-8,latin1
  " CJK environment detection and corresponding setting
  if v:lang =~ "^zh_CN"
    " Simplified Chinese, on Unix euc-cn, on MS-Windows cp936
    set encoding=chinese
    set termencoding=chinese
    if &fileencoding == ''
      set fileencoding=chinese
    endif
  elseif v:lang =~ "^zh_TW"
    " Traditional Chinese, on Unix euc-tw, on MS-Windows cp950
    set encoding=taiwan
    set termencoding=taiwan
    if &fileencoding == ''
      set fileencoding=taiwan
    endif
  elseif v:lang =~ "^ja_JP"
    " Japanese, on Unix euc-jp, on MS-Windows cp932
    set encoding=japan
    set termencoding=japan
    if &fileencoding == ''
      set fileencoding=japan
    endif
  elseif v:lang =~ "^ko"
    " Korean on Unix euc-kr, on MS-Windows cp949
    set encoding=korea
    set termencoding=korea
    if &fileencoding == ''
      set fileencoding=korea
    endif
  endif
   " Detect UTF-8 locale, and override CJK setting if needed
  if v:lang =~ "utf8$" || v:lang =~ "UTF-8$"
    set encoding=utf-8
  endif
else
  echoerr 'Sorry, this version of (g)Vim was not compiled with "multi_byte"'
endif
"-----------------------------------------------------------------------------

" 不明宽度字符的宽度设置
if exists("&ambiwidth")
    set ambiwidth=double
endif
"-----------------------------------------------------------------------------

" 自动认识换行符
set fileformats=unix,dos,mac

"-----------------------------------------------------------------------------
" 编辑相关
"
" 自动缩进
set autoindent

"-----------------------------------------------------------------------------
" 检索相关
"
"不分大小写
set ignorecase

"大小写敏感
set smartcase

"找到最后一项后返回第一项
set wrapscan

"关闭部分匹配模式
set noincsearch

"-----------------------------------------------------------------------------
" 显示相关
"
"窗口大小
set lines=40
set columns=120

"打开语法彩显
syntax on

"设置配色方案
"colorscheme evening

"不显示行号
set nonumber

"tab左侧显示提示符
set listchars=tab:\ \ 
set list

"tab的宽度设置
set tabstop=4
set shiftwidth=4

"状态栏里显示输入的命令
set showcmd

"输入括号时显示匹配括号
set showmatch

"搜索结果高亮显示
set hlsearch

"一直显示状态栏
set laststatus=2

"状态栏里显示文字编码和换行符等信息
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P


"-----------------------------------------------------------------------------
" 按键映射
"
"F2: 编辑另一个文件(接着输入文件名)
"F3: 上一文件
"F4: 下一文件
"F5: 显示行号
"F6: 不显示行号
"F7: 高亮显示搜索结果
"F8: 不高亮显示搜索结果
"F9: Shell环境(执行exit返回)

map <F2> :edit 
map <F3> :bp <CR>
map <F4> :bn <CR>
map <F5> :set nu <CR>
map <F6> :set nonu <CR>
map <F7> :set hlsearch <CR>
map <F8> :set nohlsearch <CR>
map <F9> :shell <CR>

下载:_vimrc.txt

转载:vi全屏幕编辑器简明手册

,

本文转载自ChinaUnix

vi全屏幕编辑器

vi(Visual)是以视觉为导向的全屏幕编辑器、共分为三种方式(mode):

command方式:
 任何输入都会作为编辑命令,而不会出现在屏幕上,若输入错误则有“岬”的声音;任何输入都引起立即反映

insert方式:
 任何输入的数据都置于编辑寄存器。在command方式下输入(I,a,A等),可进入insert方式,insert方式下按ESC,可跳回command方式。

escape方式:
以“:”或者“/”为前导的指令,出现在屏幕的最下一行,任何输入都被当成特别指令。

进入vi(在系统提示符下面输入以下指令):

vi           进入vi而不读入任何文件
vi filename      进入vi并读入指定名称的文件(新、旧文件均可)。
vi +n filename    进入vi并且由文件的第几行开始。
vi +filename      进入vi并且由文件的最后一行开始。
vi + /word filename  进入vi并且由文件的word这个字开始。
vi filename(s)     进入vi并且将各指定文件列入名单内,第一个文件先读入。
vedit         进入vi并且在输入方式时会在状态行显示“INSERT MODE"。


编辑数个文件(利用vi filename(s))进入vi后)

:args         显示编辑名单中的各个文件名
:n          读入编辑名单中的下一个文件
:rew         读入编辑名单中的第一个文件
:e#          读入编辑名单内的前一个文件
:e file        读入另一个文件进vi(此文件可不在编辑名单内),若原文件经修改还没有存档,则应先以: w 存档。
:e! file       强迫读入另一个文件进入vi,原文件不作存档动作。


存储及退出vi

:w filename      存入指定文件,但未退出vi(若未指定文件名则为当前工作的文件名)。
:wq 或者 zz      存文件,并且退出vi.
:q          不作任何修改并退出vi。
:q!          放弃任何修改并退出vi。
:!command       暂时退出vi并执行shell指令,执行完毕后再回到vi。
:sh          暂时退出vi到系统下,结束时按Ctrl + d则回到vi。


加数据指令

i           在关标位置开始插入字符,结束时候按ESC键。
I           在光标所在行的最前面开始加字,结束时按ESC键。
a           在光标位置后开始加字,结束时按ESC键。
A           在光标所在行的最后面开始加字,结束时按ESC键。
o           在光标下加一空白行并开始加字,结束时按ESC键。
O           在光标上加一空白行并开始加字,结束时按ESC键。
!command       执行shell指令,并把结果加在光标所在行的下一行。


删除指令

nx          删除由光标位置起始的n个字符(含光标位置,按一个x表示删除光标所在的字符)
nX           删除由光标位置起始的n个字符(不含光标位置)。
ndw          删除光标位置其实的n个字符组(word)。
d0           将行的开始到光标位置的字符全部删除。
d$D         将光标位置起始到行尾的字符全部删除。
ndd          将光标位置起始的n行(整行)删除(dd表示删除光标所在行)。
:start,endd      删除文件的第start到end行。


关标移动

          移到一行的开始
$           移到一行的最后
[           移到文件开始位置
]           移到文件结束位置
nh          往左移n位
nl 或者 n空格     往右移n位
nk          向上移n行
n+          向上移n行,光标在该行的起始
ni           向下移n行
n-          向下移n行,光标在该行的起始
H           移到屏幕的左上角
M           移到屏幕的中间行开头
L           移到屏幕的最后一行
G           移到文件的最后一行
nG或者:n       移到文件的第n行
nw          右移n个字组,标点符号属于字组
nW          右移n个字组,标点符号不属于字组
nb          左移n个字组,标点符号属于字组
nB          左移n个字组,标点符号不属于字组
Ctrl + u       屏幕上卷半个菜单
Ctrl + d        屏幕下卷半个菜单
Ctrl + b        屏幕上卷一个菜单
Ctrl + F        屏幕下卷一个菜单


修改指令

r           修改光标文件的字符
R           从光标位置开始修改,结束时按ESC键
new          更改n组字符,结束时按ESC键
ncc          从光标所在位置开始更改n行,结束时按ESC键


重排各行长度

i           并按Enter将该行由光标所在处断开,并进入insert方式
J           把下一行的数据连接到本行之后


寻找指令

/text         从光标位置往下找字串text
?text         从光标位置往上找字串text
n           继续找下一个字串(在输入上面的寻找指令之后使用)


寻找并且取代指令

:%s/text1/text2/options   将各行的text1替换为text2

               option=g表示文件中所有的text1均被取代,若未输入任何option,则只有                各行中的第一个出现的text1被取代
               option=go 在屏幕显示各取代的行
               option=gc 在每个字串取代之前要求确认 

Start,endgtext1/s/ / text2/options  同上,只寻找并取代第start~end行。

或:Start,ends/text1/text2/options


复制及移动文件

:first,last co dest      将first 到last行的数据复制到目标行(dest)下面
:Start,end m dest      将start 到 end行的数据移动到目标行(dest)下。   
:r filename          将指定文件的内容读入光标所在行下。
nY               将光标所在位置开始的n行数据暂存
p               复制暂存数据在光标的下一行
P               复制暂存数据在光标的上一行


其他命令

.               重复前一指令
u               取消前一指令
Ctrl + l           刷新屏幕显示
:set number          显示文件的行号,但不会存文件
:set nonumber         解除行号显示
:set ai            设置每行起始位置(以光标当前位置为起始)
:set noai           取消行起始位置设定
:f<Ctrl> + g        告诉用户有关现行编辑文件的数据。

推荐一个编辑器控件: ScintillaVB

,

如果你想用VB做一个编辑器,或许这个叫 ScintillaVB 的控件是你想要的东东。

据其介绍,这个编辑器控件使用著名的 Scintilla 源代码,经过一番包装而成。

这个控件的作者,做了两个编辑器:cEdit cEditMX,下载并试用了一下,感觉还过得去。

Vim图解键盘指令

, ,

这个图很有用,把它打印了一份,还得留一个连接在这儿:
http://plog.longwin.com.tw/blog_images/vi-vim-cheat-sheet.png

善用vi编辑器

, ,

vi有命令模式和插入模式之分。vi启动后就处于命令模式。在命令模式下,可以随意移动光标、进行复制和粘贴文本等操作。利用“a”、“i”、“c”、“C”、“O”和“o”等命令可以从命令模式切换到插入模式。在插入模式下,可以输入文本,按Esc键切换回命令模式。为了区别不同模式下的命令,本文在介绍时会注明是何种模式下的操作。

另外,本文的所有操作都是在Red Hat 9.0所带的vim中进行。本文介绍的各种技巧多数在各种vi版本中也都是可行的。

加密和解密

加密和解密文件

在命令模式输入“:X”命令,接着输入密码、确认输入密码,最后输入“:wq”命令保存退出。文件就已经被加密了。

经过上面方法加密后的文件变成密文文件。要阅读原来的明文,则在打开文件后,会提示用户输入密码。如果密码输入正确,就能看到原来的明文。另外可以看到,在最后的状态行上有此文件已被加密的提示。

取消加密

取消加密的方法很简单。在命令模式输入“:X”命令,首先会提示输入密码,这时直接敲回车键。接下来在提示重复输入密码时也直接敲回车键,最后输入“:wq”命令保存退出。这样文件的加密就被取消了。

注意,以上加密方法是运行在Red Hat Linux 9.0上的vim中。在其它平台可能略有差异,请以实际平台或版本的帮助为准。

替换操作

经常用到的一些简单替换命令有:

s 将当前字符替换为一个或多个字符,例如5 s 表示将从当前字符开始的5个字符替换为一个或多个字符;

S 将当前行替换为一个或多个字符;

r 单个字符替换。

文本格式转换

将DOS格式文本转成Unix格式文本,命令如下:

:1,$s/^M//g

其中^M是同时Ctrl+V+M按出来的,表示回车。

在行首尾添加字符串

用下列命令在文本每行的行首添加字符串“NewString”,请注意空格的存在。

:g/^/s//NewString/g :%s/^/NewString/g

用下列命令在每行的行尾添加字符串“NewString”:

:g/$/s//NewString/g :%s/$/NewString/g

从文本的第3行至最后一行的行首全部插入字符串“NewString”:

:3,$s/^/NewString/

在整个文件中替换

在整个文件中替换特定字符串,所用的命令如下:

:%s/old_string/new_string/g

如果仅将文件中的第3行到第7行中的“old_string”替换成“new_string”,那么使用下列命令:

:3,7s/old_string/new_string/

注意,其中“s”为表示替换动作,“%”表示所有行,“g”表示全文,“^”表示行首,“$”表示行尾。

助力编程

语法加亮

在vi中编写程序,如果为了方便想开启语法加亮功能,只需在命令模式下输入“:syntax on”即可。同理可知,如果想关闭语法加亮功能,就在命令模式下输入“:syntax off”。

快速查看函数帮助

在用vi阅读和编写程序(主要是指C或C++程序)时,如果需要了解某个函数的具体功能,可以将光标移到该函数上,然后在命令模式下输入“K”,就可以调动“Linux Programmer's Manual”中对此函数的man帮助。

标记定位

在阅读和编写大的程序文件时,利用标记(书签)功能定位是十分有帮助的。建议大家多多使用。下面举个简单的例子进行说明。

首先打开一个源代码文件,将光标移到想做标记的位置。假如做一个名为“debug1”的标记,那么用户可在命令模式下输入做标记的命令“mdebug1”,然后敲入回车键,一个名为“debug1”的标记就做好了。

接下来用户可以随意将光标移到其它的位置,当在命令模式下输入“`debug1”后,就能快速回到“debug1”的标记所在行的行首。

“ctags”命令

在阅读和编写C或C++程序时,可用“ctags”命令对当前目录下的C源程序进行扫描。命令如下:

$ ctags *.c

上面一条命令将为当前目录下的.c文件生成tags文件,然后使用“ta 函数名”命令来快速打开相应函数所在文件,并将光标定位在对应函数的开头。

自动对齐

在命令模式下使用“:set ai”命令可以让程序中各行自动对齐。

显示匹配

在编程中{}、[]、()常常是成对出现的,而且常常有多层的嵌套,很容易遗漏和失误。所以下面的这个技巧非常有用。在命令模式下使用“:set sm”命令会在用户敲)、]、}时显示出对应匹配的{、[、(来。

缩写文本

在编程中常常要输入一些重复且很长的信息,比如较长的名词和公司信息等,这时可以用vi的缩写功能。它可以将一个很长的词用一个很短的缩写来代替。比如一个较长的URL,可以给它一个缩写,在命令模式下使用“:ab myurl http://www.mykms.org/kms/myproject/index.php?id=0023”,然后在插入模式下输入“myurl”后,“myurl”就会自动变成刚才定义的那个长的URL。另外,在插入模式下输入“:una myurl”,则是取消“myurl”这个缩写。

set选项

使用“:set”可以设置vi的环境变量。vi的环境变量有很多。使用“:set all”可以显示所有环境变量。使用“:set 变量名及参数”可以设置对应的环境变量。

下面的命令可显示行号:

:set number

下面的命令可将文件设为只读:

:set readonly

下面的命令使vi在“:n”和“:!”命令之前都自动保存文件:

:set autowrite

下面的命令显示用户处在什么模式下:

:set showmode

同理,“:set noshowmode”就是关闭此显示。

vi环境变量还有很多。了解它们,将给用户使用vi带来更多方便。用户可以通过vi的联机帮助查到对应的环境变量的详细作用。

使用宏

vi的宏提供了更强大的功能,用户可以根据自己的需要来定制自己的宏,然后通过宏来完成事先定义好的一整套操作。用“map”来定义一个宏,用“unmap”来删除。在熟悉了vi的基本命令后,将这些命令组合起来就能完成复杂的工作。如果再将这些命令的组合定义成宏的话,就可以方便用户经常性地调用了。这是一个非常强大的功能,建议大家多多使用。

总结

vi是类Unix操作系统上常用的缺省编辑器。了解了vi,用户就能利用它高效地编辑文件。但是学习vi的过程很长,因为它的功能很多。不过它确实是一个值得花时间来学习的工具。所谓“工欲善其事,必先利其器”,希望大家都能学好vi,善用这一文本编辑的利器。
December 2009
S M T W T F S
November 2009January 2010
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31