ITeedu.com
自由计划
我的网盘
关于
快捷导航
编程语言
WEB开发
手机开发
数据库
操作系统
嵌入式
开源软件
作品
编辑语言
汇编
C/C++
JAVA
Python
Ruby
WEB开发
javascript
J2EE
PHP
Django
ITEEDU
编程语言
汇编
C/C++
JAVA
Python
Ruby
WEB开发
J2EE
PHP
djangocn2
手机开发
android
iphone
数据库
MYSQL
sqlite
操作系统
Linux
GRUB
嵌入式
开源软件
笔记首页
VIM基础
VIM核心思想(推荐阅读)
Vim快速入门
Vim入门基础
Vim正规表达式最短匹配
Vim列模式的应用
vim打开多窗口、多文件之间的切换
Vim标签页(tab)的使用
VIM设置代码折叠
定制VIM
Vim按键映射(Map)详解
Vim开发常用配制
Vim安装Emmet插件简介
Vim打开中文文件乱码问题
Vim移动一行或一段代码
其它
vim格言
VIM核心思想
本文的由来 ---------- 学习Vim一时间,一直不得要领。编辑器之神没啥学习要领,鬼也不信。我的方法就是多看书,一本书浏览一遍,不行就换一本。 我在《学习VI和VIM编辑器第7版中文》貌似找到了这种感觉。下面来说一说。 Vim的成功之处在于它抽像了编辑操作的本质,针对编辑操作的本质给出了一套解决方案。 思想一:分模式 -------------- 从大的角度看编辑操作分两种: 新录入:需要连接性的输入文本,可能还要边输入边编辑。 修改已有:对现有文件做边边角角的修改,主要是浏览查找。 从这两个角度VIM给出了两个模式: 插入模式:对应新录入。 命令模式:对应修改已有。 这里的命令模式包含很多地方说的“正常模式”和“命令模式”。 ### 一些新手误区 插入模式没有编辑命令 开始使用VIM觉得插入模式进行编辑不方便,其实插入模式也可以有很多Ctrl或Alt配合的命令,可以自己来定义。这样插入模式就有了一般编辑器的所有功能了,还可以定义出只属于自己的功能。 ESC太远太难用 开始觉得ESC使用不方便,模式的切换太频繁,ESC都按到吐了。其实还有其它键也等同ESC,比如Ctrl+\[,再觉得不方便还可以自己定义。我看网上有很多人定义jj键,就是在插入模式连续输入jj就可以退到命令模式。 模式切换太频繁 如果你用VIM要频繁的切换模式,说明你没有好好学习VIM。插入模式一般不用切换到命令模式,常用命令可以自己定义快捷键。你应该学学[Vim按键映射(Map)](/ide/vim/vimdiary/vimmap.php) 思想二:抽像编辑操作 -------------------- 首先看一下VIM的一般命令模式: (编辑命令)(次数)(光标命令) 或 (次数)(编辑命令)(光标命令) 光标命令是指光标移动的命令,如最常见的`hjkl`。 那一般命令模式的意思就是:“编辑指定文本几次”。 所以只要学会编辑命令和光标移动命令,其它的都是一些组合出的功能了。 ### VIM帮助 这里不会对命令进行详细说明,详细了解最好的还是用vim的帮助,学会vim帮助是学好vim的必须功课。 比如`:h d`会跳到vim命令d的帮助部分: ["x]d{motion} Delete text that {motion} moves over [into register x]. See below for exceptions \["x\]是可选的寄存器选项,以中括号括起来的是可选的意思,里面是默认值。 {motiont}和(光标命令)一样,是指确认处理哪些文本的光标命令。 ### 编辑命令 编辑命令比较少,所以先说。 编辑操作一般就几种:删除、复制、剪切、粘贴、修改。 在VIM中对应的命令: - 删除:d\[elete\]或x,x其它是dl的简写,可以看帮助。 - 复制:y\[ank\],很多地方翻译为「拔」,把内容放到寄存器。 - 剪切:VIM里删除即是剪切,删除的内容会放到寄存器。 - 粘贴:p\[ut\],放置,把寄存器里的内容放到指定位置。 - 修改:c\[hange\]、s\[ub\]、r{place\],将内容放入寄存器,并插入新内容。 所以vim命令第一个字母一般都是ydpc里的一个。 ### 光标移动命令 基本的上下左右对应`hjkl`,这也不是什么缩写,只是最快捷的键方式。 行内移动: - w:右移光标到下一个字的开头; - e:右移光标到一个字的末尾; - b:左移光标到前一个字的开头; - 0:数字0,左移光标到本行的开始; - $:右移光标,到本行的末尾; - \^:移动光标,到本行的第一个非空字符。 翻页: - ctrl+f\[orward\]:在文件中前移一页(相当于 page down); - ctrl+b\[ackward\]:在文件中后移一页(相当于 page up); 按其它方式移动: - (/):移动到 前/后 句 的开始; - {/}:跳转到 当前/下一个 段落 的开始。 - gg:将光标定位到文件第一行起始位置; - G将光标定位到文件最后一行起始位置; - NG或Ngg:将光标定位到第 N 行的起始位置。 - \*:当光标停留在一个单词上,\* 键会在文件内搜索该单词,并跳转到下一处; - \#当光标停留在一个单词上,\# 在文件内搜索该单词,并跳转到上一处; - g\_ :到本行最后一个不是 blank 字符的位置。 - fa:到下一个为 a 的字符处,你也可以fs到下一个为s的字符。 - t,:到逗号前的第一个字符。逗号可以变成其它字符。 - F/T:和 f 和 t 一样,只不过是相反方向; ### 一些组合示例 - dw:删除光标右侧的字; - 3dw:删除光标右侧的 3 个字; - 5db:删除光标左侧的 5 个字; - 3dd:删除(剪切) 3 行内容,并去除空隙; - d$:从当前光标起删除字符直到行的结束; - d0:从当前光标起删除字符直到行的开始; - c$:用输入的正文替换从光标开始到本行末尾的所有字符; - c0:用输入的正文替换从本行开头到光标的所有字符。 - 5yy:复制 5 行内容到内存缓冲区; - ncw:用输入的正文替换光标右侧的 n 个字; 以冒号(:)开头的命令 ------------------- 如果要了解以冒号(:)开头的这些命令,还要了解一下vi的历史,vi是对unix的ex行编辑器的扩展,对ex可视化产物。所以vi里的精髓还是ex这些命令。 vim里的以冒号(:)开头的这些命令大多是ex的命令,所以学好vim还要学ex的命令,你也可以以为是学vim,其实是在学ex。 ex的常用命令格式: :(行地址符)(命令) ### 行地址 对于每一个 ex 编辑命令,必须给出 ex 所要编辑的行。对于 ex 的 move 和 copy 命令,还需要给出 ex 移动或复制文本的目标位置。 可以使用下面几种方式来指定行地址: \[1\] 使用明确的行号。 \[2\] 使用能帮助你指定相对于文件中当前位置的行号的符号。 \[3\] 使用搜索模式作为标识所要编辑的行的地址。 这里就不说太详细了,列一此常用的ex命令: ### 文件操作 - :e file2 //使用 :e 进入文件 file2 中 - :w //把缓冲区写(保存)到文件中但不退出 - :q //退出编辑器 - :wq //写文件并退出编辑器,即使没有修改文件,写操作也会无条件的进行 - :x //写文件并退出编辑器,只有修改了文件,写操作才能进行 - :q! //在退出时不影响原来的文本 - : 230 , $ w newfile //将从第230行到文件末尾的文本保存到“newfile”中 - : . , 600 w newfile //将从当前行到第600行的文本保存到“newfile”中 其它命令: - :3,18d //d\[elete\]删除3\~18行 - :160,224m23 //m\[ove\]移动160\~224行到23行的下面 - :23,29co100 //co\[py\]复制23\~29行并把它们粘贴到100行的后面 - : . , $d //删除从当前行到文件末尾之间的文本 - :%d //删除文件中所有行 - :%t$ //复制所有行并把它们粘贴到文件的尾部 - : 226 , $m . -2 //把226行到文件末尾的文本移动到当前行上面的第二行 - :/pattern/d //删除下一个包含模式pattern的行 - :1 , 3d | s/thier/their/ //把1到3行删除,然后在当前行进行替换 - :1 ,5 m 10 | g/pattern/nu //把1到5行移动到第10行的后面,然后显示所有包含模式pattern的行和行号 总结一下 -------- vi核心是ex,多学ex的命令绝对有好处。 掌握vi的几个编辑命令和10几个光标移动命令,组合使用实现名称功能。 自己的vim才是好vim,学会用map定义自己的快捷键。 做完这些基本就完成了常用功能的学习,再学点要用的插件或编写插件,其它编辑器基本就不用了。 最后再来一句,vi的成功源于ex的强大,但不得不说模式确实是点睛之笔。