日期:2014-05-16  浏览次数:20687 次

linux vim 使用详解
在每个用户的主目录下,都有一个 vi 的配置文件".vimrc"或".exrc",用户可以编辑它,使这些设置在每次启动 vi 时,都有效。
??例如,加入如下设置行:
set nu 显示行号
set nonu 不显示行号
set ic 查找时不考虑大小写
set noic 查找时考虑大小写


说明:

在文本中[]表示选项或者简写掉的文字,但除了模式匹配里面的[],可参见模式匹配。

源码:

vi vim 使用
vim 编辑器

首先简单的说一下vi编辑器──unix的通用编辑器,
读作vee-eye (visual editor的简写)。
(这里的vim,是改进的vi, Vi Improved简写,Vim 由Bram Moolenaar编写)
vi的工作模式
分为命令模式和插入模式 以及 : ex模式;
按esc键就可以让vi进入命令模式;
插入模式就是你输入文本的模式了。

vi的一些简单操作:
普通操作:
插入文本
命令 i 、a、I、A、o、O
i 进入命令模式输入 i ,这时候就是和普通的文本编辑器一般了;
a 或者 输入 a ,不同的是,a是在字符的后面插入追加文本,而i在字符的前面插入;
I 行首插入;
A 行尾插入。
o 光标下新建空行
O 光标上新建空行
修改删除文本
命令 c、x、d、D
cw 删除当前位置到该位置单词的末尾,外加插入文本; cw删除的是英文单词,中文不行的。
c$ or C 删除当前位置到行末,外加插入文本。
x 只删除当前字符 如果要删一个中文字的话请用 2x (当然也可以用4x 8x) 因为一个汉字占两个字符。
cc 删除一行,外加可以插入文本。
r 删除当前字符,外加可以插入文本。
dw 只删除当前位置到这个单词末。
[n]dd 删除[n]一行。 当然可以用 2dd 3dd 删除两行,三行。
D 删除到行尾。

粘贴,复制,合并
命令 p、y、J、"(引号)
p 当你执行上面的删除操作后,你所删除的文本会留在缓存中,当你输入 p 后会把这些删除的文本粘贴到当前光标后面。
y 组合有(yw,4yy,y$等) //复制单词,复制四行,复制到行末 复制后可用p进行粘贴
J 把下一行合并到当前行,注意J大写
"[x]yy 命名你的缓冲区 在复制命令前加上冒号和名称(a到z) 例如 "ryy "d2dd "zd)复制一行到r缓冲区,删除2行到d缓冲区,删除光标到句尾到z缓冲区。
"[x]p 粘贴x缓冲区到当前位置后。
默认有1~9缓冲区 为前9次删除操作。
可视操作
命令 v、V、Ctrl+v

当用gvim可以用鼠标选择你需要复制,删除的文本,然后按d(删除)、p(粘贴)、y(复制)操作你的文本,
当然也可以和其他程序通过粘贴板进行共享数据。
v 对于xterm中的vim 则输入命令 v 进入可视状态,这时候你可以用右键进行复制粘贴操作

重复操作与撤消
命令 . (点号) 、 u 、U
. 重复上一次的操作,当并不是那种重作,他只是重复你上次输入的命令。
Ctrl+R 重做
u 撤消上次操作
U 撤消当前行进行的任意修改。
查找文本
命令 /、?、n、N
/ 向后查找文本进入命令模式输入 /[你要查找的文本]; 例如找edit 输入 /edit ;
? 而向前查找文本就是输入 ?[你要查找的文本] ;
n 当有许多搜索结果时,命令模式下输入 n 就可以找下一个搜索结果,而输入 N
N 则是反向下一个搜索结果。

打开,保存与退出
先进入ex模式,就是在命令模式下输入 : 再输入命令。
命令 ZZ、 q、 w、 e、r
:ZZ 进入命令模式 输入 ZZ (大写)就是保存+退出;
:w 保存文本 进入命令模式 输入 w 就是保存;
:q! 强行退出是输入 q! ;
:e! 撤消当前所有编辑,返回原始状态的话,请输入 e! ;
:w [filename] 另存为就是 w [filename] 。
:e [filename] 打开另外一个文件(打开新文件前,请先保存文件。
:r [filename] 读入filename内容到当前文件的当前位置后
移动光标
命令 hjkl、(、)、{、}、e、w、b、gg、G

hjkl 一般可直接用键盘上的方向键进行光标的移动。而page up/down 键就是前后翻页了;
或者,命令模式下 按
h(左) j(下) k(上) l(右)
或者在这个基础加上数字,进行几行几行的移动,例如 4j就表示向下移动四行。
nG 例如200G 就是移动200行了。而Ctrl+G就是显示当前行信息(多少行,在文本的位置);
G 到文件尾
gg 到文件头

e 另外 输入 e 可以一单词的移动光标,
( 当前句首
) 下一句开始 例如 2) 向前移动两个句子
{ 段开始
} 下一段头
b、w 后前以单词为单位移动。

标记命令 m、‘(单引号)、`(反引号也就是 ~ 那里那个键)
m[x] 标记x(a~z)位置 例如 mb 标记当前光标位置为标志b
’x 移动光标到x标记行的行首
`x 移动光标到x标记的原始光标位置
'' 移动到上一标记行首
`` 移动到上一标记原光标位;
zl zh zs ze 窗口左滚 右滚 左开始 右结束 //可设置 :set sidescroll=32 设置滚动长度(我好象用不了这个命令)
其他
Ctrl+L 刷屏
return 到下一行行首
-、+ 移动光标上下一行,上下一行的行首(好象+号要用小键盘的+号才行);
Ctrl+G 显示当前行信息
H 屏幕起点
M 屏幕中间
L 屏幕尾

组合使用例子 命令模式下
例子:现有文本

aaabbb
cccdddeeefff (光标在第一行)

输入 /aab回车 d /ccc回车 那就会删除掉当前位置aab(包括aab), 到ccc前所有数据并复制数据到缓冲(和剪切差不多)。当然d也可用改成y做复制用途,再用p粘贴。

vim的ex状态 当在: ex模式下可以用tab进行自动补齐命令(用: set nu 显示行数) 并可以利用 | 可以将多个命令组合在同一提示符下

文本搜索,替换,移动,删除,复制
命令 :g/、:s/ 、:m 、:d、:co (或者:t)
:g :g/[文本] 全局搜索文本,光标移动到最后一个搜索文本,并显示所有数据加所在行。
:g!/[文本] 没有[文本]的行
:s :[第n行],[到第m行]s/[要替换的]/[替换的] n-m行之间进行替换,如果没有n,m那么就进行当前行的替换
:%/s/[要替换的]/[替换的]/g 进行全局替换。 %表示每一行, 另外有 . 表示当前行, $ 表示最后一行,另外可用+-号表示该行的上下n行,例如.-2 表示当前行上面第二行
:m :[要移动的数据]m[移动的地方] 例子 :20,30m100 20-30行移动到100行前(最后一行是100行)
例子: :g/^$/d 删除所有空行 d加上删除动作


搜索模式
.(点号) 任一个单字符,汉字用两个点 ..
* 匹配前面字符零个或者多个任意(并不表示任意字符) 例如 /abcdl* 就会查找abcdl或者以abcd开始的,而查找所有是 /.*
^ 表示从行首开始
$ $在表达式末表示以正则表达式要在行末。
转义 .表示找. *表示找* \表示找
[ ] [0~9]表示匹配0~9之间任意一个数字 同理有[A~Z]和[a~z],而[AB3a]表示找有A,B, 3,a其中任意一个字符。
< , > 单词开始或者末尾以空格或者标点符号开始或者结束。 例如 inux> 匹配linux.
回车
制表符
执行sh命令
:![shell command] 例如 :!ls

添加数据到