Linux命令行下的vim文本编辑器

  下面这个网站的地址讲解的非成分清楚!!!!

  http://blog.csdn.net/niushuai666/article/details/7275406


学习 vim 并且其会成为你最后一个使用的文本编辑器。没有比这个更好的文本编辑器了,非常地难学,但是却不可思议地好用。

我建议下面这四个步骤:

  1. 存活
  2. 感觉良好
  3. 觉得更好,更强,更快
  4. 使用VIM的超能力

当你走完这篇文章,你会成为一个vim的 superstar。

在开始学习以前,我需要给你一些警告:

  • 学习vim在开始时是痛苦的。
  • 需要时间
  • 需要不断地练习,就像你学习一个乐器一样。
  • 不要期望你能在3天内把vim练得比别的编辑器更有效率。
  • 事实上,你需要2周时间的苦练,而不是3天。
 

第一级 – 存活

  1. 安装 vim
  2. 启动 vim
  3. 什么也别干!请先阅读

当你安装好一个编辑器后,你一定会想在其中输入点什么东西,然后看看这个编辑器是什么样子。但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键)

  1. 各种插入模式

    • a → 在光标后插入
    • o → 在当前行后插入一个新行
    • O → 在当前行前插入一个新行
    • cw → 替换从光标所在位置后到一个单词结尾的字符
  2. 简单的移动光标
    • 0 → 数字零,到行头
    • ^ → 到本行第一个不是blank字符的位置(所谓blank字符就是空格,tab,换行,回车等)
    • $ → 到本行行尾
    • g_ → 到本行最后一个不是blank字符的位置。
    • /pattern → 搜索 pattern 的字符串(陈皓注:如果搜索出多个匹配,可按n键到下一个)
  3. 拷贝/粘贴 (陈皓注:p/P都可以,p是表示在当前位置之后,P表示在当前位置之前)
    • P → 粘贴
    • yy → 拷贝当前行当行于 ddP
  4. Undo/Redo
    • u → undo
    • <C-r> → redo
  5. 打开/保存/退出/改变文件(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

:ZQ 不保存文件,退出vi

4. 在命令模式下,可以输入以下命令:
(1)光标移动命令
h: 左
l: 右
k: 上
j: 下
向左光标键
向右光标键
向上光标键
向下光标键

(2)插入命令

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:向前翻一屏

Linux命令行下的vim文本编辑器的更多相关文章

  1. Linux 命令行下搜索工具大盘点,效率提高不止一倍!

    在 Linux 命令行下进行文本关键字的搜索,大家肯定第一时间会想到 grep 命令.grep 命令确实十分强大,但如果需要用到它更加灵活的功能时,可能命令就会显得十分复杂. 于是,为了简化 grep ...

  2. 在mac上命令行里面如何打开文本编辑器?

    在mac上命令行里面如何打开文本编辑器?   在linux命令行terminal上使用gedit直接就可以打开文本文件 那么在mac上面如何操作呢? 使用:open -a TextEdit setti ...

  3. 详解Linux命令行下常用svn命令

    1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/do ...

  4. 在linux命令行下执行php 程序

    如何在linux命令行下,执行php程序. 例子 打印当前时间 php -r "echo time()" 随机输出一个数字 php -r "echo rand(1,20) ...

  5. Linux命令行下cp,rm,mv命令的使用

    以下的内容来源于<鸟哥的私房菜> Linux命令行下的复制.删除与移动:cp,rm,mv cp(copy)复制        cp这个命令的用途很多,除了单纯的复制之外,还可以创建链接文件 ...

  6. linux命令行下svn常用命令

    linux命令行下svn常用命令 1. 将文件checkout到本地目录 1 #path是服务器上的目录 2 svn checkout path 3 4 #示例 5 svn checkout svn: ...

  7. Linux命令行下如何终止当前程序

    Linux命令行下如何终止当前程序 快捷键: Ctrl+c 在命令行下起着终止当前执行程序的作用, Ctrl+d 相当于exit命令,退出当前shell Ctrl+s 挂起当前shell(保护作用很明 ...

  8. Linux命令行下常用svn命令

    1.Linux命令行下将文件checkout到本地目录 svn checkout path(path是服务器上的目录) 例如:svn checkout svn://192.168.1.1/pro/do ...

  9. Linux命令行快捷键及vim快捷方式

    Linux命令行快捷键 快捷键: tab键 自动补全路径 目录 名字, 自动不全命令 快捷键: ctrl +l(小写) 清屏 . ctrl +c 取消当前操作 快捷键: ctrl +d(小写) 退出当 ...

随机推荐

  1. ruby的代码风格

    http://stylesror.github.io/ 大部分同意,有小部分,不敢苟同.

  2. [搬运] [贪心]NOIP2011 观光公交

    推荐这篇题解:http://www.cnblogs.com/Blacko/archive/2013/10/18/3376597.html 只不过这篇题解有一些细节没有说清,但建议自己思考- Codes ...

  3. Tomcat 容器的设计和实现

    Tomcat 容器是对 Servlet 规范的实现,也称为 Servlet 引擎.在分析 Tomcat 容器的设计和实现之前,首先简单了解一下 Servlet 规范,弄清楚 Tomcat 究竟要实现什 ...

  4. Java 判断是否包含指定的子串 contains()

    Java 手册 contains public boolean contains(CharSequence s) 当且仅当此字符串包含指定的 char 值序列时,返回 true. 参数: s - 要搜 ...

  5. mysql/oracle ip地址比较

    SELECT hub_gid FROM CPP_HUB_IPSEGMENT WHERE IpToLong(#{ip}) BETWEEN IpToLong(ip_begin) AND IpToLong( ...

  6. 030:Cetus中间件和MHA读写分离

    030:Cetus中间件和MHA读写分离 line:V1.1 mail: gczheng@139.com date: 2018-08-30 一.主机环境 虚拟机配置 CPU 内存 硬盘 OS版本 My ...

  7. 20181123_控制反转(IOC)和依赖注入(DI)

    一.   控制反转和依赖注入: 控制反转的前提, 是依赖倒置原则, 系统架构时,高层模块不应该依赖于低层模块,二者通过抽象来依赖 (依赖抽象,而不是细节) 如果要想做到控制反转(IOC), 就必须要使 ...

  8. C++快速输出一个整数的二进制表示(不用写函数)

    如果要输出int型的整数x,代码为: cout << bitset<>(x) << endl; 如果要输出long long型的整数x,代码为: cout < ...

  9. 修改jvm xms参数

    http://hi.baidu.com/200770842223/item/9358aad4f3194e1a20e2501b http://www.cnblogs.com/mingforyou/arc ...

  10. 读到的"关于授权"

    关于授权 记得公司刚有十几个人的时候,全公司我最忙,经常同时接两三个销售电话,还得安排送货,结账,进货,每天来得最早,走得最晚.一次我弟弟到公司,看了半天,发表感慨说:"哥我怎么觉得你在养活 ...