vi tutorial
时间:2007-07-04 来源:我爱spring
:sp 上下分割窗口
:sp 文件名 编辑指定文件并上下分割窗口
:vsp 左右分割窗口
:vsp 文件名 编辑指定文件并左右分割窗口
Ctrl-w p 在窗口间切换
Ctrl-w k 移到上面窗口
Ctrl-w j 移到下面窗口
Ctrl-w l 移到右面窗口
Ctrl-w h 移到左面窗口
Ctrl-w + 扩大光标所在窗口
Ctrl-w - 缩小光标所在窗口
Ctrl-w = 使窗口大小一致
自动产生代码片段的插件。
安装:
# mkdir -p ~/.vim/after/ftplugin
# vim snippetsemu1_1.vba
:so %
使用:
编辑一个Perl文件,输入:
for<tab><tab><tab><tab>
或
for<tab>i<tab>100<tab><tab>
即可了解该插件的功能。
2.MiniBufExplorer
类似UltraEdit和Editplus的Tab,同时编辑多个文件的时候非常有用。
安装:
# cp minibufexpl.vim /usr/share/vim/vimcurrent/plugin
使用:
在gVim下可以用鼠标点击来切换当前编辑的文件。
在Console下,先用<Ctrl-w-k>激活MiniBufExplorer区,然后用<Tab>或<Shift-Tab>进行文件切换。
实际上,用:bn或:bp即可在文件之间切换(可以在设置文件中绑定按键)。
左:h
下:j
上:k
右:l
下一行行首:+
上一行行首:-
当前行行首:0
当前行行尾:$
后一个单词词首:w,W
后一个单词词尾:e,E
前一个单词词首:b,B
下一屏:CRTL+F
上一屏:CRTL+B
下半屏:CRTL+D
上半屏:CRTL+U
文件尾:G
当前屏幕首行:H
当前屏幕末行:L
当前屏幕中央:M
指定行:行号G,:行号
指定字符串前:/字符串,?字符串
当前行指定字符前:f字符,F字符
文字追加和插入
当前光标右方追加:a
当前光标行尾追加:A
当前光标左方追加:i
当前光标行首追加:I
当前行下方追加行:o
当前行上方插入行:O
文字删除
删除光标位置文字:x
删除光标左方文字:X
删除当前行:dd
删除光标移动范围内的文字:d光标移动命令
文字替换
替换1文字到多文字:s
替换1文字到1文字:r
替换到当前行尾:C
替换当前行:cc
从当前位置开始替换直到输入ESC:R
文字复制和粘贴
(例)
复制光标以下3行:3yy,3Y
复制光标以后6个单词:6yw
粘贴到光标以下:p
粘贴到光标以上:P
通用替换命令
:行1,行2s/字符串1/字符串2/g
“行1,行2”指定方法例:
第5行到第30行:5,30
当前行到第30行:.,30
第5行到第末尾行:5,$
第5行到含有end的行:5,/end/
所有行:%
其他常用命令
显示行号
:set number 或者 :set nu
隐藏行号
:set nonumber 或者 :set nonu
自动缩进
:set autoindent 或者 :set ai
不自动缩进
:set noautoindent 或者 :set noai
显示Tab及行尾字符
:set list
隐藏Tab及行尾字符
:set nolist
设置Tab宽度为4个字符
:set tabstop=4
查看当前设置
:set all
另外,本文的所有操作都是在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,善用这一文本编辑的利器
from: http://my.opera.com/jlake/blog/index.dml/tag/Vim
:sp 文件名 编辑指定文件并上下分割窗口
:vsp 左右分割窗口
:vsp 文件名 编辑指定文件并左右分割窗口
Ctrl-w p 在窗口间切换
Ctrl-w k 移到上面窗口
Ctrl-w j 移到下面窗口
Ctrl-w l 移到右面窗口
Ctrl-w h 移到左面窗口
Ctrl-w + 扩大光标所在窗口
Ctrl-w - 缩小光标所在窗口
Ctrl-w = 使窗口大小一致
推荐两个Vim的插件
Saturday, 9. June 2007, 15:19:21
Vim, Editor
1.snippetsEmu自动产生代码片段的插件。
安装:
# mkdir -p ~/.vim/after/ftplugin
# vim snippetsemu1_1.vba
:so %
使用:
编辑一个Perl文件,输入:
for<tab><tab><tab><tab>
或
for<tab>i<tab>100<tab><tab>
即可了解该插件的功能。
2.MiniBufExplorer
类似UltraEdit和Editplus的Tab,同时编辑多个文件的时候非常有用。
安装:
# cp minibufexpl.vim /usr/share/vim/vimcurrent/plugin
使用:
在gVim下可以用鼠标点击来切换当前编辑的文件。
在Console下,先用<Ctrl-w-k>激活MiniBufExplorer区,然后用<Tab>或<Shift-Tab>进行文件切换。
实际上,用:bn或:bp即可在文件之间切换(可以在设置文件中绑定按键)。
新做的vim配置文件
Wednesday, 13. December 2006, 02:29:55
Editor, 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>
vi 光标移动及常用编辑命令
Saturday, 23. September 2006, 15:28:15
vi, Vim
光标移动左:h
下:j
上:k
右:l
下一行行首:+
上一行行首:-
当前行行首:0
当前行行尾:$
后一个单词词首:w,W
后一个单词词尾:e,E
前一个单词词首:b,B
下一屏:CRTL+F
上一屏:CRTL+B
下半屏:CRTL+D
上半屏:CRTL+U
文件尾:G
当前屏幕首行:H
当前屏幕末行:L
当前屏幕中央:M
指定行:行号G,:行号
指定字符串前:/字符串,?字符串
当前行指定字符前:f字符,F字符
文字追加和插入
当前光标右方追加:a
当前光标行尾追加:A
当前光标左方追加:i
当前光标行首追加:I
当前行下方追加行:o
当前行上方插入行:O
文字删除
删除光标位置文字:x
删除光标左方文字:X
删除当前行:dd
删除光标移动范围内的文字:d光标移动命令
文字替换
替换1文字到多文字:s
替换1文字到1文字:r
替换到当前行尾:C
替换当前行:cc
从当前位置开始替换直到输入ESC:R
文字复制和粘贴
(例)
复制光标以下3行:3yy,3Y
复制光标以后6个单词:6yw
粘贴到光标以下:p
粘贴到光标以上:P
通用替换命令
:行1,行2s/字符串1/字符串2/g
“行1,行2”指定方法例:
第5行到第30行:5,30
当前行到第30行:.,30
第5行到第末尾行:5,$
第5行到含有end的行:5,/end/
所有行:%
其他常用命令
显示行号
:set number 或者 :set nu
隐藏行号
:set nonumber 或者 :set nonu
自动缩进
:set autoindent 或者 :set ai
不自动缩进
:set noautoindent 或者 :set noai
显示Tab及行尾字符
:set list
隐藏Tab及行尾字符
:set nolist
设置Tab宽度为4个字符
:set tabstop=4
查看当前设置
:set all
善用vi编辑器
Thursday, 30. March 2006, 08:21:53
Linux, Editor, Vim
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,善用这一文本编辑的利器
from: http://my.opera.com/jlake/blog/index.dml/tag/Vim
map <F9> :shell <CR>
相关阅读 更多 +










