Linux命令行下的vim文本编辑器
下面这个网站的地址讲解的非成分清楚!!!!
http://blog.csdn.net/niushuai666/article/details/7275406
学习 vim 并且其会成为你最后一个使用的文本编辑器。没有比这个更好的文本编辑器了,非常地难学,但是却不可思议地好用。
我建议下面这四个步骤:
- 存活
- 感觉良好
- 觉得更好,更强,更快
- 使用VIM的超能力
当你走完这篇文章,你会成为一个vim的 superstar。
在开始学习以前,我需要给你一些警告:
- 学习vim在开始时是痛苦的。
- 需要时间
- 需要不断地练习,就像你学习一个乐器一样。
- 不要期望你能在3天内把vim练得比别的编辑器更有效率。
- 事实上,你需要2周时间的苦练,而不是3天。
第一级 – 存活
- 安装 vim
- 启动 vim
-
什么也别干!请先阅读
当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子。但vim不是这样的,请按照下面的命令操作:
- 启 动Vim后,vim在 Normal 模式下。
- 让我们进入 Insert 模式,请按下键 i 。(陈皓注:你会看到vim左下角有一个–insert–字样,表示,你可以以插入的方式输入了)
- 此时,你可以输入文本了,就像你用“记事本”一样。
- 如果你想返回 Normal 模式,请按
ESC
键。
现在,你知道如何在 Insert 和 Normal 模式下切换了。下面是一些命令,可以让你在 Normal 模式下幸存下来:
-
i
→ Insert 模式,按 ESC
回到 Normal 模式.
-
x
→ 删当前光标所在的一个字符。
-
:wq
→ 存盘 + 退出 (:w
存盘, :q
退出) (陈皓注::w 后可以跟文件名)
-
dd
→ 删除当前行,并把删除的行存到剪贴板里
-
p
→ 粘贴剪贴板
推荐:
-
hjkl
(强例推荐使用其移动光标,但不必需) →你也可以使用光标键 (←↓↑→). 注: j
就像下箭头。
-
:help <command>
→ 显示相关命令的帮助。你也可以就输入 :help
而不跟命令。(陈皓注:退出帮助需要输入:q)
你能在vim幸存下来只需要上述的那5个命令,你就可以编辑文本了,你一定要把这些命令练成一种下意识的状态。于是你就可以开始进阶到第二级了。
当是,在你进入第二级时,需要再说一下 Normal 模式。在一般的编辑器下,当你需要copy一段文字的时候,你需要使用 Ctrl
键,比如:Ctrl-C
。也就是说,Ctrl键就好像功能键一样,当你按下了功能键Ctrl后,C就不在是C了,而且就是一个命令或是一个快键键了,在VIM的Normal模式下,所有的键就是功能键了。这个你需要知道。
标记:
- 下面的文字中,如果是
Ctrl-λ
我会写成 <C-λ>
.
- 以
:
开始的命令你需要输入 <enter>
回车,例如 — 如果我写成 :q
也就是说你要输入 :q<enter>
.
第二级 – 感觉良好
上面的那些命令只能让你存活下来,现在是时候学习一些更多的命令了,下面是我的建议:(陈皓注:所有的命令都需要在Normal模式下使用,如果你不知道现在在什么样的模式,你就狂按几次ESC键)
-
各种插入模式
-
a
→ 在光标后插入
-
o
→ 在当前行后插入一个新行
-
O
→ 在当前行前插入一个新行
-
cw
→ 替换从光标所在位置后到一个单词结尾的字符
-
简单的移动光标
-
0
→ 数字零,到行头
-
^
→ 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
-
$
→ 到本行行尾
-
g_
→ 到本行最后一个不是blank字符的位置。
-
/pattern
→ 搜索 pattern
的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)
-
拷贝/粘贴 (陈皓注:p/P都可以,p是表示在当前位置之后,P表示在当前位置之前)
-
Undo/Redo
-
打开/保存/退出/改变文件(Buffer)
-
:e <path/to/file>
→ 打开一个文件
-
:w
→ 存盘
-
:saveas <path/to/file>
→ 另存为 <path/to/file>
-
:x
, ZZ
或 :wq
→ 保存并退出 (:x
表示仅在需要时保存,ZZ不需要输入冒号并回车)
-
:q!
→ 退出不保存 :qa!
强行退出所有的正在编辑的文件,就算别的文件有更改。
-
:bn
和 :bp
→ 你可以同时打开很多文件,使用这两个命令来切换下一个或上一个文件。(陈皓注:我喜欢使用:n到下一个文件)
花点时间熟悉一下上面的命令,一旦你掌握他们了,你就几乎可以干其它编辑器都能干的事了。但是到现在为止,你还是觉得使用vim还是有点笨拙,不过没关系,你可以进阶到第三级了。
vim文本编辑器是一个非常强大的工具,可以做很多事情,比如新建文件,打开文件,编辑文件,保存文件,同时打开多个文件等。下面总结一些常用的vim 编辑器命令:
1. 进入vim编辑器的方式:(进入vim编辑器时,默认的模式是“命令模式”) 在终端输入
vi:进入vim编辑器
vi filename:进入vim编辑器,新建了一个filename文件,光标定位到文件的第一行
vi在工作时,会在当前目录下创建.swp的临时文件,该临时文件也称为交换文件
当vi结束对当前文件编辑且正常退出时,临时文件.swp会被自动删除
当vi结束对当前文件编辑且非正常退出时,临时文件.swp会被残留下来
vi + filename:进入vim编辑器,打开已存在的filename文件,光标定位到文件的最后一行
vi在工作时,会在与被编辑文件相同的目录内创建一个名为.filename.swp的临时文件
当vi结束对当前文件编辑且正常退出时,临时文件.filename.swp会被自动删除
当vi结束对当前文件编辑且非正常退出时,临时文件.filename.swp会被残留下来
vi +# filename:进入vim编辑器,打开已存在的filename文件,光标定位到文件的第#行(#必须用数字代替)
vi -R filename:进入vim编辑器,以只读方式打开已存在的filename文件,被编辑的文件不能回存,但可以另存为
vi -r filename:从vi crash或非正常退出中恢复文件
vi -r .*.swp:从交换文件.*.swp中恢复文件
vi -r:列出当前目录内所有因vi非正常退出而残留的交换文件,以便恢复
vi -L:列出当前目录内所有因vi非正常退出而残留的交换文件,以便恢复
2. vi有三种工作方式: 命令模式、 编辑模式及 命令项模式。
命令模式:在这种模式下,可以通过输入vi的命令对文件的内容进行处理(复制、删除、移动等),也可以通过按光标键来移动光标。
编辑模式:在这种模式下,可以在光标处输入内容。
命令项模式:在命令模式下,用户输入冒号后,光标会跳到底行,然后输入命令。
命令模式 --> 输入a、A、i、I、o、O等命令 --> 编辑模式
编辑模式 --> 按ESC键 --> 命令模式
命令模式 --> 输入冒号 --> 命令项模式
3. 退出vi的命令
在命令模式下,输入:
:w 保存文件,不退出vi
:w filename 把vi中的内容保存到不存在的filename文件,不退出vi
:w! filename 把vi中的内容保存到已存在的filename文件,不退出vi
:w>>filename 把vi中的内容追加到filename文件,不退出vi
:n1,n2w filename 把n1行到n2行的内容保存到不存在的filename文件
:n1,n2w! filename 把n1行到n2行的内容保存到已存在的filename文件
:wq 保存文件,退出vi
:x 保存文件,退出vi
:ZZ 保存文件,退出vi
:q 不保存文件,退出vi(若文件已改变,则不能退出)
:q! 不保存文件,退出vi
4. 在命令模式下,可以输入以下命令:
(1)光标移动命令
h: 左
l: 右
k: 上
j: 下
向左光标键
向右光标键
向上光标键
向下光标键
i:在光标处插入内容
I:在第一行插入内容
a:在光标后插入内容
A:在当前行的尾部插入内容
o:在当前行的下面插入新行
O:在当前行的上面插入新行
(3)删除命令
x:删除光标处的字符
X:删除光标前的一个字符
d0:删除从当前光标所在行的第一个字符到当前光标的前一个字符的一串字符
D:删除从当前光标所在的字符到当前光标所在行的最后一个字符的一串字符
dd:删除光标所在行的所有字符
dw:删除从光标处字符开始的一个单词
例如:a boy girl pig
如果光标在l处,dw后,结果是:a boy girpig
如果光标在l和p之间的空格处,dw后,结果是:a boy girlpig
如果光标在b处,dw后,结果是:a girl pig
#dd:删除从光标所在的行到其后的#-1行(#必须用数字代替)
#x:删除从光标所在的字符开始的#个字符(#必须用数字代替)
:n1,n2 d:删除n1行到n2行的内容
(4)复制命令
:n1,n2 t n3:把n1行到n2行的内容复制到第n3行的下一行
(5)移动命令
:n1,n2 m n3:把n1行到n2行的内容移动到第n3行的下一行
(6)修改/替换命令
r:输入一个字符替换光标处的一个字符
R:从光标处的字符开始替换,后面的字符一个一个被输入的字符覆盖
s:输入一串字符来替换光标处的字符
S:先清除光标所在的行,你可以在当前行输入一串字符
cc:先清除光标所在的行,你可以在当前行输入一串字符
cw:修改一个单词
例如:ab cdef ghijk
光标在d处,输入cw后,结果是:ab cde$ ghijk,
此时若输入pqghd后,结果是:ab cpqghd ghijk
此时若输入p后按ESC键,结果是:ab cp ghijk
C:修改从光标处开始及其该行后面的部分
例如:ab cdef ghijk
光标在d处,输入cw后,结果是:ab cdef ghij$,此时输入pqghd后,结果是:ab cpqghd
(7)光标定位命令
0:定位到光标所在行的行首
$:定位到光标所在行的行末
:#:定位到第#行的行首
:$:定位到最后一行的行首
/exp:向后定位到字符串exp
?exp:向前定位到字符串exp
/^exp:定位到行首为字符串exp的行
/exp$:定位到行末为字符串exp的行
n,m ?/exp:从n行到m行向前搜索字符串exp (此命令有待商榷)
n,m |/exp:从n行到m行向前搜索字符串exp (此命令有待商榷)
(8)搜索替换命令
:s/exp1/exp2/g:将当前行的字符串exp1替换成字符串exp2
:n,m s/exp1/exp2/g:将n行到m行的字符串exp1替换成字符串exp2
:g/exp1/exp2/g:将当前行的字符串exp1替换成字符串exp2
:g/exp1/s//exp2/g:将全文中的字符串exp1替换成字符串exp2
(9)撤销命令
u
(10)缓冲区命令
默认情况下,vi使用无名缓冲区,例如:虽然将文件的某些部分删除了,但仍可以用u命名进行撤销。
yy:将光标所在的行放入无名缓冲区
Y:将光标所在的行放入无名缓冲区
p:将缓冲区中的内容粘贴到光标所在的行的下一行
P:将缓冲区中的内容粘贴到光标所在的行的上一行
"#yy:将光标所在的行放入缓冲区# (#必须用a~z代替)
"#p:将缓冲区#中的内容粘贴到光标所在的行的下一行 (#必须用a~z代替)
"#P:将缓冲区#中的内容粘贴到光标所在的行的上一行 (#必须用a~z代替)
"#d:删除当前行,将当前行的内容放入缓冲区#
(11)其它命令
:set nu:显示行号
:set nonu:取消行号
:n 定位到下一个文件
:N 定位到上一个文件
vi 1.c 2.c 3.c:一次打开3个文件
首先会打开1.c,输入:n命令后,会打开2.c,再输入:n命令后,会打开3.c,
再输入:N命令后,会打开2.c,再输入:N命令后,会打开1.c。
Ctrl+G:显示当前编辑文件的信息
Ctrl+L:刷新屏幕
Ctrl+d:向后翻半屏
Ctrl+u:向前翻半屏
Ctrl+f:向后翻一屏
Ctrl+b:向前翻一屏