文本编辑器:

行编辑器:sed

全屏编辑器:nano,vi,vim


Vim程序编辑器

 Vim可以认为是vi的高级版本

 Vi:visual interface 全屏文本编辑器

 Vim:vi iMproved 改善的全屏文本编辑器

Vim教程:

 vimtutor


模式化编辑器:

 编辑模式:键入命令完成光标移动,文本的复制,移动,删除

 输入模式:可以进行任意内容的编辑

 末行模式:输入命令决定保存和离开的方式


模式间切换:

 Vim打开文件直接进入编辑模式;


编辑模式--->输入模式

 输入i,I,a,A,o,O,r,R可进入输入模式(insert mode)

 i:从目前光标所在处插入;

 I:从目前光标所在行的第一个非空格字符处开始插入;

 a:append 从当前光标后追加输入;

 A:从当前行的行尾开始插入;

 o:从光标所在行的下一行,插入新的一行;

 O:从光标所在行的上一行,插入新的一行;

 r:只会替换光标所在的那一个字符一次;

 R:一直替换光标所在的文字,直到按下ESC键为止


输入模式--->编辑模式

 ESC退出输入模式,返回编辑模式


编辑模式--->末行模式

 : 由编辑模式进入末行模式


末行模式--->编辑模式

 ESC 退出末行模式,返回编辑模式


打开vim

 #vim 打开vim程序编辑器

 #vim /PATH/TO/SOMEFILE 打开指定文件

 +#: #为行号,打开后光标定位到#行行首

 +/PATTERN 通过模式来选定光标位置


关闭vim 在末行模式下关闭vim

 :q 退出vim

 :q!  如果修改过文件,不保存退出,使用 ! 强制退出,不保存

 :w  保存编辑的文件

 :w!  若文件属性为"只读"时,强制写入文件,最终能不能保存,取决于对该文件的权限

 :wq  保存后退出

 :wq! 强制保存后退出

 :x 保存退出

 ZZ 大写ZZ 若文件没有改动,则不保存离开,若文件有改动则保存后退出

 :w [filename] 将编辑的文件保存成另一个文件  类似另存为

 :r [filename]  在编辑的文件中,读入另一个文件,将filename文件的内容加到光标所在行的后边

 :#,# w [filename] 将#行到#行的内容保存成filename文件


光标跳转:编辑模式下

字符间跳转:

 h:光标向左移动一个字符

 l:光标向右移动一个字符

 j:光标向下移动一个字符

 k:光标向上移动一个字符

 #COMMAND: 跳转指定行数,如 10k 向上10行

行内跳转:

 ^: 跳转至行首第一个飞空白字符

 0: 跳转至绝对行首

 $: 跳转至绝对行尾

行间移动

 #G: 移动到文件的第#行

 1G,gg:移动到文件的第一行

 G: 移动到文件的最后一行

句间移动:

 ):跳转到下一句

 (:跳转到前一句

段落间移动

 {:跳转到下一段的段首

 }:跳转到上一段的段首


编辑命令:

字符编辑命令:

 X : 大X为向前删除一个字符,相当于Backspace

 x : 小写x向后删除一个字符,相当于del

 #x:删除光标所在处向后#个字符

 xp:将光标所在处的字符和后边一个字符位置对调


删除命令:

d:

 d^ 删除光标所在处到行首的所有字符

 d$ 删除光标所在处到行尾的所有字符

 d0 删除光标所在处到行首的所有字符

 dw 删除光标所在处的单词

 de  删除光标所在处向后一个单词

 db  删除光标所在处向前一个单词

 dG  删除光标所在处到最后一行的所有字符

 dd: 删除光标所在行

 #COMMAND  例 10dd 删除光标所在处向下10行

 注意:删除内容会被vim编辑器保存至缓冲区当中


粘贴命令:p (paste, put)

 如果此前复制或者删除的内容不是完整的行:

 p 小写:粘贴至当前光标所在处的后面

 P 大写:粘贴至当前光标所在处的前面

 如果复制的内容是完整行(可以不止一行)

 p小写:粘贴之当前光标所在行下方

 P大写:粘贴至当前光标所在行上方


复制命令: y, yank

 y:

 yy: 复制光标所在的那一行

 #yy:复制光标所在的向下#行

 #COMMAND

 y1, y1G, yG, y$, y^, y0, ye, yw, yb


改变命令:c, change 兼具文件编辑模式转换

 c$,c^,c0,cb,

 ce,ce,cw

 cc: 删除光标所在行,进入插入模式

 #COMMAND 例如 10cc 向下删除10行 并且进入编辑模式


撤销此前的编辑工作

 u: undo

 撤销此前的编辑操作

 #u 撤销此前的#次操作

 Ctrl+r 恢复此前的撤销工作

 .:重复起一个编辑操作


翻屏操作

 Ctrl+f: 屏幕向下翻一页

 Ctrl+b: 屏幕向上翻一页

 Ctrl+d:屏幕向下移动半页

 Ctrl+u:屏幕向上移动半页


示例:

# vim /tmp/test/test_vim +3

Vim程序编辑器_interface

# vim /tmp/test/test_vim +/^a

Vim程序编辑器_程序_02


末行模式:

(1)地址,定界

 :start_pos,end_pos

 #: 第#行

 #,#:从#行到#行

 #,+#:从#行到第#+#行

 .:当前行

 $:组后一行

 %: 全文,相当于1,$


 /pat1/: 第一次被此模式所匹配到的行;

 #,/pat1/:从第#开始,第一次被此模式所匹配到的行

 /pat1/,/pat2/:第一次被此模式所匹配到的行 到 第二次被匹配到的行

 后边可跟编辑命令:

   y,w,r


(2)查找

/PATTERN: 向尾部进行搜索

?PATTERN: 向首部进行搜索

n: 与命令同方向

N: 与命令反方向


(3)查找替换

s:在末行模式下,在地制定界的范围内完成查找替换操作

s/要查找的内容/替换为的内容/修饰符

要查找的内容:可使用模式

替换为的内容:不能使用模式,但可以使用后向引用符号,以引用前面模式中的分组括号所匹配到的内容;

\1, \2, ...

&:引用"要找的内容"匹配到的整个内容;

修饰符:

i: 忽略大小写

g: 全局替换

c:提示给用户确认是否需要替换

/:用于分隔符,所以,要查找的内容或替换为的内容中出现此符号,要使用\对其转义,使用格式:\/

分隔符可替换为其它字符:例如@,#等;


多文件模式:

vim FILE1 FILE2 ...

 :n 编辑下一个文件

 :N 编辑上一个文件

 :files 列出目前这个vim打开的所有文件

 :next 编辑下一个文件

 :first 编辑第一个文件

 :prev 编辑上一个文件

 :last 编辑最后一个文件


 :wqall 保存并退出所有打开文件

 :q!all  强制退出所有打开文件


多文件窗口分割:

 vim -o|-O FILE1 FILE2 ...

 Ctrl+w, ARROW(箭头) 切换窗口


单文件窗口分割:

 Ctrl+w, s: split, 水平分割

 Ctrl+w, v: vertical, 垂直分割


vim恢复文件与打开时的警告信息

  vim编辑器的恢复功能

   当使用vim编辑文件时,vim会在被编辑文件的目录下创建一个名为.filename.swap的文件,作为暂存文件

# vim grub.conf
# kill 掉 vim进程
#当再次编辑vim grub.conf时,出现
E325: ATTENTION
Found a swap file by the name ".grub.conf.swp"
          owned by: root   dated: Tue Sep  8 16:59:29 2015
         file name: /tmp/grub.conf
          modified: no
         user name: root   host name: oc3137372501.ibm.com
        process ID: 12062
While opening file "grub.conf"
             dated: Tue Sep  8 16:06:24 2015

(1) Another program may be editing the same file.
    If this is the case, be careful not to end up with two
    different instances of the same file when making changes.
    Quit, or continue with caution.

(2) An edit session for this file crashed.
    If this is the case, use ":recover" or "vim -r grub.conf"
    to recover the changes (see ":help recovery").
    If you did this already, delete the swap file ".grub.conf.swp"
    to avoid this message.

Swap file ".grub.conf.swp" already exists!
[O]pen Read-Only, (E)dit anyway, (R)ecover, (D)elete it, (Q)uit, (A)bort:

    [o]pen Read-Only

        以只读方式打开此文件

    (E)dit anyway

        以正常方式打开要编辑的文件,不会载入暂存文件内容,这样容易出现多个用户同时编辑同一文件

    (R)ecover

        加载暂存文件内容,恢复之前没有保存的的内容,不过当保存离开后,仍然需要手动删除暂存文件

    (D)elete it

        确定暂存文件没有用的情况下,在打开编辑文件之前删除暂存文件

    (Q)uit

        按下q离开vim

    (A)bort

        忽略这个编辑行为,和quit非常类似


定制vim的某些工作特性:

(1) 行号

 显示:set nu

 禁用:set nonu

(2) 括号匹配

 显示:set sm

 禁用:set nosm

(3) 自动缩进:

 set ai

 set noai

(4) 高亮搜索

 set hlsearch

 set nohlsearch

(5) 语法着色

 syntax on

 syntax off

(6) 忽略字符大小写

 set ic

 set noic


 :help 获取帮助

 :help SUBJECT


特性设定的永久生效方式:

全局配置文件:/etc/vimrc

用户个人的配置文件:~/.vimrc 默认不存在可以手动创建

# vim ~/.vimrc

1 "这个文件说引号是注释

2 set nu          "显示行号

3 set hlsearch    "高亮显示

4 set autoindent  "自动缩进

5 syntax on       "进行语法检测颜色显示


练习:

1、复制/etc/grub2.cfg配置文件至/tmp目录,用查找替换命令删除/tmp/grub2.cfg文件中的行首的空白字符;CentOS: /etc/grub.conf

 
  # %s/^\s//g


2、复制/etc/rc.d/init.d/functions文件至/tmp目录,用查找替换命令为/tmp/functions的每行开头为空白字符的行的行首加一个#; 原有空白字符保留;

 
  # %s/^\s\+/#&/g


3、替换/tmp/functions文件中的/etc/sysconfig/init为/var/log;

 # %s@/etc/sysconfig/init@/var/log@g


4、删除/tmp/functions文件中所以#开头,且#后面至少跟了一个空白字符的行的行首#

 # %s/^\(#\)\(\s\+\)/\2/g



如有错误,敬请指正!

谢谢!