- 浏览: 221178 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (144)
- Python (6)
- Java (15)
- Project management (2)
- DB (11)
- Spring (1)
- Mobile (3)
- 互联网 (10)
- Maven (2)
- SCM (5)
- linux (24)
- Mac (14)
- UCD / UED (6)
- Tools (1)
- Test (1)
- iPhone (1)
- 新产品&新工具 (8)
- OAuth (4)
- Java Script (5)
- HTML5 (2)
- Lucene / Solr (7)
- nginx (1)
- Product Manager (1)
- Design (1)
- Office (1)
- RegExp (0)
- 性能调优 (2)
- 读书笔记 (2)
- NodeJs (2)
最新评论
-
410163269:
看不清楚 蛋疼
基于 OAuth 安全协议的 Java 应用编程 -
xufun:
路过,拜读学习了。谢谢!
未来的授权标准 -- OAuth 2.0 -
xufun:
好文!路过拜读了,谢谢!
NoSQL - CouchDB入门 -
mimicom:
牛b......
最牛B的 Linux Shell 命令(三) -
as3291363:
你有一些 中文資料嗎????
Java Script 代码生成器: CoffeeScript
Vi IMproved (VIM) 是 Bram Moolenaar 开发的与 UNIX 下的通用文本编辑器 vi 兼容并且更加强大的文本编辑器。它支持语法变色、正规表达式 匹配与替换、插入补全、自定义键等等功能,为编辑文本尤其是编写程序提供了极大方便。VIM 可以 运行在“ 任何” 操作系统上,包括我们常用的 Windows 和 UNIX/Linux 。一旦掌握了 VIM ,你就掌握了 一项跨平台的利器。
尽管 VIM 功能十分强大,但对于刚接触它的人尤其是用惯类似 Windows 的 notepad 的人来说,VIM 并不十分易于掌握,毕竟它兼容的是 vi 而不是 notepad 。本文旨在介绍 VIM 中我所了解的用法,希望 有更多的人喜欢 VIM 。应该指出的是,VIM 中有太多的功能和命令,有许多你并不用的着,因此 没有记的必要,有些我也不知道,这要靠你来发现,关键是多看 :help ,多试。另外,取决于你的 VIM 的版本以及编译安装时的设置,文中讲述的某些功能或命令在你的 VIM 中也许并不存在,如有需要 请升级。
1. vi 的基本用法
vi 的屏幕区域分为两个部分:最下面一行是命令行,一般用于提示信息或命令行输入;除此之外 为正文显示区域。跟 notepad 不同的是,vi 中存在两种模式:普通(Normal) 模式和插入(Insert) 模式。
进入 vi 后默认即为普通模式。新手一般初次进入 vi 后就想输入一串字符,结果发现 vi 一连串莫名其妙的反应。其实,在 vi 的普通模式下,任何按键包括普通字符都表示某个命令,并不 表示在当前光标处插入字符。常用的命令有:( 注意区分大小写)
: |
进入命令行 |
i 或 a |
进入插入模式。区别是:i 进入插入模式后,光标在当前字符前面; a 进入插入模式后,光标在当前字符后面 |
h j k l |
分别是光标左移、下移、上移、右移( 一般来说你不会用到它们来移动光标,按方向键就可以了) |
x |
删除一个字符 |
dd |
删除一行 |
J |
删除本行的回车符,把下一行并入本行末尾 |
r 字符 |
替换光标所在字符为新字符 |
^ $ |
分别是光标移到行首和行末 |
数字G |
移动光标到第若干行,如果直接按 G 则移动到最后一行 |
在普通模式中,命令以按键形式输入。而在命令行中,命令以字符串形式输入。下面是常用的命令行:
:q |
退出! ( 更确切的说应该是关闭当前文件) |
:w 文件名 |
存盘。如果还是保存为当前文件,不必写文件名 |
:wq |
存盘退出 |
:new 文件名 |
打开或新建文件( 同时关闭当前文件) 。如果不指定文件名或者文件名不存在则是新建文件 |
:help |
帮助! 看完后用 :q 关掉窗口。可以在 help 后面加某个帮助主题的名称,如 :help dd 或 :help help |
还有一点是,如果某个命令得到警告( 拒绝执行) ,则要在命令的命令词后加叹号表示强制执行。比如 你修改过文件,但又想放弃存盘并退出,如果输入 :q ,vi 会告诉你文件已修改,这时,你只能输入 :q! 退出。又如用 :w! a.txt 表示把当前文件存为 a.txt 而不管 a.txt 是否已经存在。
插入模式就不用多说了,添加你的新内容吧。不过,你也许会发现 BackSpace 键和 Delete 键的运用 很受限制,也不能像 notepad 那样选择、复制和粘贴。这些都是由于这是 vi 的标准,后面我们将看到 VIM 扩展的功能可以解决这些问题。记住按 ESC 退出插入模式,回到普通模式。
2. 复制和粘贴
为了便于选取文本,VIM 引入了可视(Visual) 模式。要选取一段文本,首先将光标移到段首,在 普通模式下按 v 进入可视模式,然后把光标移到段末。需要注意,光标所在字符是包含在选区中的。这时 可以对所选的文本进行一些操作,常用的( 可视模式) 命令有:
x 或 d |
剪切( 即删除,同时所选的文本进入剪贴板) |
y |
复制 |
r 字符 |
所有字符替换为新字符 |
u U ~ |
分别是所有字母变小写、变大写、反转大小写 |
> < |
分别是缩进和反缩进 |
当输入了命令以后,VIM 将回到普通模式,这时可以按 p 或 P 进行粘贴。普通模式下有关 复制和粘贴的命令:
v |
进入可视模式 |
p 或 P |
在当前位置粘贴剪贴板的内容,p 粘在光标所在字符后面,P 粘在前面 |
不得不承认,虽然引入了可视模式,复制和粘贴在 VIM 中仍然是比较麻烦的操作,这也许是 VIM 唯一的缺点。:-) 此外,VIM 还引入了选择(Select) 模式,跟可视模式类似。结合一些键的定义 和选项设置,可以实现跟 notepad 相同的复制和粘贴的使用习惯。限于篇幅和水平,在此不提。
3. VIM 的定制
VIM 在 vi 的基础上扩展了许多功能和命令,提供了许多选项。但是有些功能默认是关闭的,有些选项 可能也不符合个人的使用习惯。为此,我们需要编写一个 vimrc 文件。在 DOS/Windows 版本的 VIM 中,这个文件应放在 VIM 的目录下,文件名为“_vimrc” 。在 UNIX 版本 的 VIM 中,这个文件 一般可以放在用户的个人主目录下,文件名为“.vimrc” 。VIM 启动时将会把 vimrc 文件中的每一行 作为命令行依次执行,我们可以在该文件中加入若干命令,使 VIM 启动时自动开启一些 有用的功能,定义一些常用的快捷键等。
下面是一个 vimrc 文件的示例:( 请注意区分浏览器的换行与实际的换行。)
"
设置
Backspace
和 Delete
的灵活程度,backspace=2
则没有任何限制 |
下面给出我常用的 vimrc 文件。另外,你的 VIM 安装目录下很可能也带有一个默认的 vimrc 文件,你都可以参考。如果遇到没有见过的命令或者参数,可以自己看看 :help 。
4. VIM 的其它命令
要真正使用 VIM ,光靠 vi 的基本命令当然不行,下面就来介绍更多的命令。以下的命令,有些是 VIM 特有的,有些在 vi 中也存在,我就不加区分了。其中,以“:” 开头表示该命令 在命令行输入,以“i” 开头表示这是插入模式下的命令,其它则是普通模式下的命令。<C-X> 表示按 Ctrl+X 。
4.1 使用帮助
<C-]> |
在 :help 中,遇到超连接可以按 Ctrl+] 跳转 |
<C-T> |
在 :help 中,按 Ctrl+T 往回跳转 |
4.2
打开多个文件
:split 文件名 |
切分出一个新窗口,打开指定文件。如果省略文件名,则仍显示当前文件,可用于同时观察文件的不同部分。( 注意跟 :new 的区别) |
<C-W>f |
切分显示光标所指的文件名,VIM 会在 path 中搜索该文件名,比如常用它打开 #include 语句中的文件 |
<C-W><C-W> |
当同时打开几个文件时,按 <C-W><C-W> 在各窗口之间切换 |
<C-W>_ |
当同时打开几个文件时,按 <C-W>_ 使当前窗口最大化 |
:set scrollbind |
设置卷动绑定属性。所有设置了卷动绑定属性的窗口将一起卷动。可以用 :set noscrollbind 解除绑定 |
4.3
撤销和恢复
编辑过程中出现错误在所难免,不过没有关系,VIM 允许无限次的撤销。只要你 没有关闭文件,你甚至可以一直撤销下去,回到几个小时以前刚打开这个文件开始工作时的状态。
u |
撤销(Undo) 上次所做的修改 |
<C-R> |
恢复(Redo) 上次撤销的内容 |
4.4
字符串搜索替换
/ 字符串 |
向下搜索字符串 |
? 字符串 |
向上搜索字符串 |
* # |
分别是向下和向上搜索光标所指的词 |
n |
重复上一次搜索 |
: 起始行, 结束行s/ 搜索串/ 替换串/g |
从起始行到结束行,把所有的搜索串替换为替换串 |
:set ignorecase |
设置忽略字母大小写。可以用 :set noignorecase 取消忽略字母大小写 |
例如 /hello 从当前光标位置开始向下搜索 hello ,不带字符串的命令 / 可重复上一次搜索,相当于 n 。又如 :1,$s/hello/hi/g 把全文中的 hello 改为 hi ,其中 $ 表示最后一行。另外,你还可以先进入可视模式选择一段文本,按 :进入命令行并输入 s/hello/hi/g ,VIM 将在选区中进行替换操作。
搜索字符串用的是正规表达式(Regular expression) ,其中许多字符都有特殊含义:
\ |
取消后面所跟字符的特殊含义。比如 \[vim\] 匹配字符串“[vim]” |
[] |
匹配其中之一。比如 [vim] 匹配字母“v” 、“i” 或者“m” ,[a-zA-Z] 匹配任意字母 |
[^] |
匹配非其中之一。比如 [^vim] 匹配除字母“v” 、“i” 和“m” 之外的所有字符 |
. |
匹配任意字符 |
* |
匹配前一字符大于等于零遍。比如 vi*m 匹配“vm” 、“vim” 、“viim”…… |
\+ |
匹配前一字符大于等于一遍。比如 vi\+m 匹配“vim” 、“viim” 、“viiim”…… |
\? |
匹配前一字符零遍或者一遍。比如 vi\?m 匹配“vm” 或者“vim” |
^ |
匹配行首。例如 /^hello 查找出现在行首的单词 hello |
$ |
匹配行末。例如 /hello$ 查找出现在行末的单词 hello |
\(\) |
括住某段正规表达式 |
\ 数字 |
重复匹配前面某段括住的表达式。例如 \(hello\).*\1 匹配一个开始和末尾都是“hello” ,中间是任意字符串的字符串 |
对于替换字符串,可以用“&” 代表整个搜索字符串,或者用“\ 数字” 代表搜索字符串中的 某段括住的表达式。
举一个复杂的例子,把文中的所有字符串“abc……xyz”
替换为“xyz……abc”
可以有下列写法:
:%s/abc\(.*\)xyz/xyz\1abc/g
:%s/\(abc\)\(.*\)\(xyz\)/\3\2\1/g
其它关于正规表达式搜索替换的更详细准确的说明请看 :help pattern
。
4.5 插入补全
在插入模式下,为了减少重复的击键输入,VIM 提供了若干快捷键,当你要输入某个 上下文曾经输入过的字符串时,你只要输入开头若干字符,使用快捷键,VIM 将搜索上下文,找到 匹配字符串,把剩下的字符补全,你就不必敲了。这样,编程序时你起多长的变量名都没关系了,:-) 而且还可以减少输入错误。我认为,插入补全是 VIM 最为突出的一项功能。
i<C-P> |
向上搜索,补全一个词。例如,上文中出现过 filename 这个词,当你想再输入 filename 时,只要按 f<C-P> 即可。假如 VIM 向上搜索,找到以 f 开头的第一个匹配不是 filename ,你可以继续按 <C-P> 搜索下一个匹配进行补全。当然,如果你想一次 <C-P> 就成功,你可以多输入几个字符比如 filen 再按 <C-P> 补全 |
i<C-N> |
向下搜索,补全一个词 |
i<C-X><C-L> |
补全一行。比如你写过一行 for (int i = 0; i < 100; i++) ,你想再写一模一样的一行,只要输入 for<C-X><C-L> 即可。如果补全出来的不是你想要的那一行,你可以按 <C-P> 或 <C-N> 选择上一个或下一个匹配行 |
i<C-X><C-F> |
在文件系统中搜索,补全一个文件名 |
如果按 <C-P> 或 <C-N> 补全一个词,在当前文件中没有找到匹配,VIM 将搜索 #include 语句中的文件,而文件的位置将在 path 中搜索。
4.6 键的定义
在
VIM
中你可以定义一个键,按了这个键等于按了某一串预定的键。比如
:map! <F10> <Esc>ddi
表示如果你在插入模式下按 <F10>
就相当于连续按了 <Esc>ddi
,这将会使 VIM
退回到普通模式,删除一行,再进入插入模式。
map 命令有许多变化形式,每种变化形式所定义的键只在某些模式下有效,而在其它模式下 无效。你需要根据情况使用正确的变化形式:
:nmap |
键只对普通模式有效 |
:imap |
键只对插入模式有效 |
:vmap |
键只对可视模式有效 |
:cmap |
键只在命令行下有效 |
:map |
键在普通模式和可视模式都有效 |
:map! |
键在插入模式和命令行下都有效 |
还要注意,如果你定义 :map d di 这将引起循环定义错误。这时,你需要使用 :noremap d di 来定义。同样,noremap 也有对不同模式的变化形式。
比如,你想在文件的每一行的倒数第二个字符处插入字符串“abc”
,你可以定义
:nmap <F10> $hiabc<Esc>j
在普通模式下按一次 <F10>
将会:光标移到行末,光标左移一格,进入插入模式,输入“abc”
,退回到 普通模式,光标下移一行。不停地按 <F10>
将解决问题。这是我临时处理多行重复操作的
常用手段,当然,这是一种笨办法。:-)
而上文写到的对 <F2>
<F3>
的定义则是 map
更复杂的用法。你还可以定义
:map <F9> :w<CR>:!gcc -o %< -I/usr/include/qt -lqt %<CR>
:map <F5> :!./%<
实现按 <F9>
编译当前文件,按
<F5>
执行。
在插入补全当中提到的补全一行需要按 <C-X><C-L>
,如果你觉得麻烦,你可以定义
:inoremap <C-L> <C-X><C-L>
减少击键次数。同样,对 <C-X><C-F>
也可以作类似定义。
4.7 其它命令
:! 命令行 |
执行一条外部命令 |
. |
在光标当前位置处重复上一次操作 |
i<C-V> 后续字符 |
输入特殊的 ASCII 字符或键。除了插入模式外,也适用于命令行。后续字符可以是键盘上的任意键,也可以是三位的十进制数字表示字符的 ASCII 码 |
i<C-O> 命令 |
执行一个普通模式的命令,执行完毕后回到插入模式 |
<C-W>i |
跳转到光标所指标识符的定义行。比如你在编程时遇到一个函数 CreateWindow ,想看它的定义语句,你就可以在它上面按 <C-W>i ,VIM 将打开新窗口,把光标移到它定义的地方。当然,前提是在当前文件或它的 #include 文件中存在 CreateWindow 的定义。这也牵涉到 path 的设置。不过,VIM 找得不一定很准 |
K |
看光标所指标识符的 man 帮助页 |
i<C-Y> |
把上一行对应列的字符抄下来 |
i<C-E> |
把下一行对应列的字符抄上来( 写这一行时我就用了 <C-Y>) |
<C-A> |
光标所指整数加一 |
<C-X> |
光标所指整数减一 |
<C-O> |
光标返回到以前的位置。相当于光标移动的“ 撤销” |
<C-I> |
光标返回到后来的位置。相当于光标移动的“ 恢复” |
<C-V> |
进入可视模式,选取一个矩形区域。该命令通常用于对多行进行列操作。接着按 I 可以在块前的每一行同时插入字符;按 A 可以在块后的每一行同时插入字符;按 x 、d 或 y 可以剪切或复制;等等 |
:X |
对当前文件加密 |
5. VIM 6.0
的一些新特性
2001 年 9 月 26 日发布的 VIM 6.0
发表评论
-
HowTo: Add Jobs To cron Under Linux or UNIX?
2011-04-27 14:24 1116How do I add cron job under Lin ... -
wget下载网站目录下的所有文件
2011-04-26 14:18 2934wget是linux下命令行的下载工具,功能很强大。 ... -
用wget爬取网站
2011-04-26 14:10 4009下载单独页面: wget xxx.com/a.htm 下 ... -
从 screen 切换到 tmux
2011-04-17 12:12 1359对于各个终端控来说,screen 是几乎每天都会使用的 ... -
linux下远程管理利器-tmux
2011-04-01 20:07 1172在使用无论哪种软件 ... -
Linux 下常用的 CLI 软件
2011-04-01 19:56 974作为Linuxer,必须具备一定的CLI操作能力。有时候用 ... -
Vi删除操作大全
2011-04-01 15:04 801:%s/r//g ... -
在Linux系统下递归删除文件或目录的方法
2011-03-23 15:30 1061在linux下没有类似DOS下 del/s *.dep 的 ... -
Linux中如何让进程在后台运行
2011-03-23 11:11 917在Linux中,如果要 ... -
我的Linux书架
2011-01-28 22:59 822入门类 一直认为,在 ... -
Linux系统信息查看命令大全
2010-09-03 14:05 826系统 # uname -a ... -
linux下解压命令大全
2010-09-03 14:02 792.tar 解包:tar xvf FileName.tar ... -
最牛B的 Linux Shell 命令(四)
2010-09-01 13:58 11131.查看ASCII码表 man 7 ascii ... -
使用grep恢复被删文件内容
2010-08-24 16:24 819在Unix/Linux下,最危险的命令恐怕就属rm命令了,每次 ... -
最牛B的 Linux Shell 命令(三)
2010-08-23 17:40 11271. 更友好的显示当前挂 ... -
最牛B的 Linux Shell 命令(二)
2010-08-23 16:57 9021.用你最喜欢的编辑器来敲命令 command < ... -
最牛B的 Linux Shell 命令(一)
2010-08-20 15:11 9691.以SUDO运行上条命令 $ s ... -
Cygwin 的轻量级替代品 Gow: 可让你在 Windows 上使用 Linux 命令
2010-08-20 11:09 1202如果你是 Linux 及 Windows 的双料用户,而且是深 ... -
第二部分 Linux 文件、目录与磁盘格式 - Chapter 9 文件的压缩与打包
2009-08-24 16:45 943Chapter 9 文件的压缩与打 ... -
第二部分 Linux 文件、目录与磁盘格式 - Chapter 7 Linux文件和目录管理
2009-08-19 17:46 1112# 目录与路径 * 相对路径与绝对路径 (略) ...
相关推荐
### Vim使用指南及基础知识 #### 一、简介 Vim是一款功能强大的文本编辑器,它在程序员和技术人员中非常受欢迎。Vim具有高度可定制性,并且提供了丰富的功能集,如代码高亮、语法检查、多级撤销机制、宏记录等。本...
#### 一、VIM 简介 - **VIM**(Vi Improved)是一款在Unix环境下广泛使用的全屏文本编辑器。几乎每一台Unix机器都会预装VIM,这使得它成为了用户在不同平台之间进行高效文本编辑的重要工具。 - 尽管现代Unix系统中...
- **Vim简介**:Vim(Vi IMproved)是一款基于vi编辑器的强大文本编辑工具,它不仅继承了vi的所有功能,还在此基础上进行了大量的改进和扩展,使之成为现今最强大的文本编辑器之一。 - **特点**: - 高度可定制:...
Vim是一种高级文本编辑器,在Unix和类Unix操作系统中被广泛使用。它被看作是vi编辑器的升级版,具有更丰富的功能和扩展性。Vim作为一个模式化的编辑器,它的操作依赖于不同的“模式”来进行文本的编辑工作。这种模式...
#### 一、Vim简介与基本操作 ##### 1. Vim是什么? Vim是一款功能强大的源代码编辑器,最初基于Vi进行开发,并在此基础上进行了大量的改进和增强。Vim支持多种操作系统平台,包括Unix、Linux、Windows等,并且能够...
### vim简介:Linux/Unix下的开发工具vim使用详解 vim,全称为Vi IMproved,是Unix/Linux系统下的一款高度优化的文本编辑器,它在原始vi的基础上进行了诸多增强与改进,成为了现代操作系统中最受欢迎和广泛使用的...
#### 一、VIM简介 VIM(vi Improved),作为vi编辑器的一个增强版本,由Bram Moolenaar编写并维护,是Linux环境下广泛使用的文本编辑工具之一。VIM在保留vi原有功能的基础上,增加了许多实用特性,并拥有高度可定制...
1.1 vim 简介 vim 是一个功能强大的多模式编辑器,vim 的作用是建立、编辑、显示文本文件。vim 没有菜单,只有命令。 1.2 命令模式下的常用命令 * 插入命令:a 代表在当前光标后插入,i 代表在当前光标前插入,o ...
**vi和vim编辑器详解** ...vi和vim编辑器因其高效和灵活性在IT行业中有着广泛的使用。熟练掌握vim不仅能提高代码编写效率,还能提升在各种环境下的适应性。不断实践和探索,你会发现vim成为你不可或缺的工具。
2.1.1 vim使用简介 vim是UNIX系统下最通用的文本编辑器,vi是visual editor的简写,发音为[vi’ai]。vim不是一个所见即所得的编辑器,如果要进行复制和格式化文本需要手动输入命令进行操作。 2.1.2 使用vim建立...
vim的简介,做的很漂亮的一个pdf文件,也可以当课件使用
目 录 第1篇 Linux网络开发基础 第1章 Linux操作系统概述 2 1.1 Linux发展历史 2 ...1.1.1 Linux的诞生和发展 ...2.1.1 vim使用简介 14 2.1.2 使用vim建立文件 15 2.1.3 使用vim编辑文本 16 请下载全部进行解压
7. **`VIM`简介**:`VIM`是“Vi Improved”的缩写,它是由Bram Moolenaar开发的一款增强版的`vi`编辑器。该编辑器包含了许多改进功能,使其成为一款功能强大的文本编辑工具。 8. **用户手册和参考手册**:`vim`提供...