Linux文本编辑器之 vi vim 详谈

Linux文本编辑器之 vi vim

        vi :Visual Interface,它与sed不同,sed是功能比较简单的行编辑器,而vi是一个功能强大的全屏文本编辑器,它还有一个增强版vim (Vi IMproved).在vim里,有很多功能强大的文本编辑快捷键,以便你在编辑文本是能够迅速的实现文本的查找,修改,替换,引用等操作.

vim功能,操作详解:

打开文件:

QQ截图20160810095415.png

    # vim [OPTION]… FILE…

    +#: 打开文件后,直接让光标处于第#行的行首

    +/PATTERN:打开文件后,直接让光标处于第一个被

    PATTERN匹配到的行的行首

    vim + file 直接打开file,光标在最后一行

    vim -b file 二进制方式打开文件

    vim -d file1 file2… 比较多个文件

    vim -m file 只读打开文件

     ex file 或 vim –e 直接进入ex模式

     如果该文件存在,文件被打开并显示内容

    如果该文件不存在,当编辑后第一次存盘时创建它

vim:是一个模式编辑器

QQ截图20160810095900.png

 三种主要模式:(模式的名称在每个地方叫法不同,如,有人喜欢叫扩展命令模式叫末行命令模式等)

    1: 命令模式(默认):移动光标,剪切/粘贴文本

    2: 插入(编辑)模式:修改文本

    3: 扩展命令模式:保存,退出等

  Esc键 :退出当前模式

  Esc键 Esc键 : (两下Esc键)返回到命令模式

    

    模式转换

         插入模式 —-> 命令模式

        ESC

         命令模式 —-> 扩展模式

        :

         扩展模式 —-> 命令模式

        ESC

         锁定和解锁:CTRL+s,Ctrl+q       

    1 : 运行命令 vim /etc/inittab 默认以命令模式打开文本

blob.png

    2: 在命令模式下按快捷键 i 等,进入编辑模式

blob.png

    3: 在命令模式下,输入 : 可以进入 扩展命令模式

blob.png

    关闭文件

        扩展模式:

            :q 退出

            :q! 强制退出,丢弃做出的修改

            :wq 保存退出

            😡 保存退出

        命令模式

            ZZ: 保存退出

            ZQ:不保存退出

    命令模式 –> 插入模式

            i: insert, 在光标所在处输入

            I:在当前光标所在行的行首输入

            a: append, 在光标所在处后面输入

            A:在当前光标所在行的行尾输入

            o: 在当前光标所在行的下方打开一个新行

            O:在当前光标所在行的上方打开一个新行

     扩展模式 : 按“ :”进入Ex模式, 创建一个命令提示符:,处于底部的屏幕左侧        

            命令:

            w 写(存)磁盘文件

            wq 写入并退出

            x 写入并退出

            q 退出

            q! 不存盘退出,即使更改都将丢失

            r filename 读文件内容到当前文件中

            w filename 将当前文件内容写入另一个文件

            !command     //运行命令command,命令运行完之后按Enter继续编辑文本

            r!command     //将命令command运行的结果输入之当前光标的下方

   命令模式

      光标跳转           

            h: 左 l: 右 j: 下 k: 上       // 字符间跳转:在按键前先输入数字,按数字移动,如 10h 向左移动10个字符

            #COMMAND:跳转由#指定的个数的字符;

         单词间跳转

            w:下一个单词的词首

            e:当前或下一单词的词尾

            b:当前或前一个单词的词首

            #COMMAND:由#指定一次跳转的单词数

         当前页跳转

            H:页首 M:页中间行 L:页底

      翻屏操作:

 Ctrl+f: 向文件尾部翻一屏

 Ctrl+b: 向文件首部翻一屏

 Ctrl+d: 向文件尾部翻半屏

 Ctrl+u:向文件首部翻半屏

      字符编辑:

x: 删除光标处的字符;

#x: 删除光标处起始的#个字符

xp: 交换光标所在处的字符及其后面字符的位置

~:转换大小写

 替换命令(r, replace)

r: 替换光标所在处的字符

R:切换成REPLACE模式

    删除命令:

d: 删除命令,可结合光标跳转字符,实现范围删除;

d$: 删除到行尾

d^:删除到非空行首

d0:删除到绝对行首

dw:向后删除一个单词

de:向后删除一个单词

db:向前删除一个单词

#command: #为数字,command为以上的命令符

dd: 删除光标所在的行

#dd:多行删除

D: 从当前光标位置一直删除到行尾,留空行,等同于d$

     复制命令(y, yank):

y: 复制,行为相似于d命令

y$ :复制到行尾

y0 :复制到绝对行首

y^ :复制到非空行首

ye :向后复制一个单词

yw :向后复制一个单词

yb :向前复制一个单词

#COMMAND:#为数字,command为以上的命令符

 yy:复制行

#yy: 复制多行

 Y: 复制整行

     粘贴命令(p, paste):

p:缓冲区存的如果为整行,则粘贴当前光标所在行的下方;否则,则粘贴至当前光标所在处的后面

P:缓冲区存的如果为整行,则粘贴当前光标所在行的上方;否则,则粘贴至当前光标所在处的前面

     改变命令(c, change)

c: 修改后切换成插入模式

 命令模式 –> 插入模式

c$:替换到行尾

c^:替换到非空行首

c0:替换到绝对行首

cb:替换前一个单词

ce:替换后一个单词

cw:替换后一个单词

#COMMAND :#为数字,command为以上的命令符

        cc:删除当前行并输入新内容

#cc:替换多行

        C:删除当前光标到行尾,并切换成插入模式

      粘贴

 100iwang [ESC] 粘贴“ wang” 100次

    <start position><command><end position>

 Command:

y 复制、 d 删除、 gU 变大写、 gu 变小写

例如 0y$ 命令意味着:

0 → 先到行头

y → 从这里开始拷贝

$ → 拷贝到本行最后一个字符

ye 从当前位置拷贝到本单词的最后一个字符

撤销更改:

 u撤销最近的更改

 #u撤销之前多次更改

 U 撤消光标落在这行后所有此行的更改

 按Ctrl – r重做最后的“撤消”更改

 . 重复前一个操作

 n.重复前一个操作n次

扩展模式:地址定界

地址定界:

start_pos,end_pos

#: 具体第#行,例如2表示第2行;

#,#: 从左侧#表示行起始,到右侧#表示行结尾

#,+#: 从左侧#表示的行起始,加上右侧#表示的行数

: 2,+3 表示2到5行

.: 当前行

$: 最后一行

.,$-1 当前行到倒数第二行

%:全文, 相当于1,$

     /pat1/,/pat2/     :从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束

#,/pat/

/pat/,$

    使用方式:后跟一个编辑命令

d :删除

y :复制

w file: 将范围内的行另存至指定文件中

r file:在指定位置插入指定文件中的所有内容

 

查找

/PATTERN:从当前光标所在处向文件尾部查找

?PATTERN:从当前光标所在处向文件首部查找

n:与命令同方向

N:与命令反方向

查找并替换

     s: 在扩展模式下完成查找替换操作

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

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

替换为的内容:不能使用模式,但可以使用\1, \2, …

等后向引用符号;还可以使用“ &”引用前面查找时查找到的整

个内容

修饰符:

i: 忽略大小写

g: 全局替换;默认情况下,每一行只替换第一次出现

gc:全局替换,每次替换前询问

 查找替换中的分隔符/可替换为其它字符,例如

s@/etc@/var@g

s#/boot#/#i

vim的寄存器

有26个命名寄存器和1个无命名寄存器,常存放不同的剪贴版内容,可以不同会话间共享。未指定,将使用无命名寄存器.

用a, b,…,z表示,用“寄存器表示,放在数字和命令之间

如: 3"tyy :表示复制3行到t寄存器中

"tp   :表示将t寄存器内容粘贴

有10个数字寄存器,用0, 1, …, 9表示, 0存放最近复制内容, 1存放最近删除内容。当新的文本变更和删除时, 1转存到2, 2转存到3,以此类推。数字寄存器不能在不同会话间共享。

vim可以编辑二进制文件

    编辑二进制文件

     以二进制方式打开文件

    vim –b binaryfile

     扩展命令模式下,利用xxd命令转换为可读的十六进制

    :%!xxd

     扩展命令模式下,利用xxd命令转换回二进制

    :%!xxd –r

vim的可视化模式

     允许选择的文本块

        v 面向字符

blob.png

        V 面向行

blob.png

        ctrl-v 面向块

blob.png

     可视化键可用于与移动键结合使用:

        w, ) , } ,箭头等

     突出显示的文字可以被删除,复制,变更,过滤,搜索/替换等

多文件模式

 vim FILE1 FILE2 FILE3 …

:next 下一个

:prev 前一个

:first 第一个

:last 最后一个

:wall 保存所有

:qall 退出所有

:wqall

blob.png

使用多个窗口:

多文件分割

vim -o|-O FILE1 FILE2 …

-o: 水平分割

-O: 垂直分割

在窗口间切换: Ctrl+w, Arrow

单文件窗口分割:

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

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

ctrl+w,q:取消相邻窗口

ctrl+w,o:取消全部窗口

: wqall 退出

定制vim的工作特性

 配置文件:永久有效

全局: /etc/vimrc

个人: ~/.vimrc

 扩展模式:当前vim进程有效

 (1) 行号

显示: set number, 简写为set nu

取消显示: set nonumber, 简写为set nonu

 (2) 括号成对匹配

匹配: set showmatch, 简写为set sm

取消: set nosm

 (3) 自动缩进

启用: set ai

禁用: set noai

 (4) 高亮搜索

启用: set hlsearch

禁用: set nohlsearch

 (5) 语法高亮

启用: syntax on

禁用: syntax off

 (6) 忽略字符的大小写

启用: set ic

不忽略: set noic

 (7) 文件格式

启用: fileformat=unix

不忽略: fileformat=dos

 (8) 设置文本宽度

:set textwidth=65 (vim only)

:set wrapmargin=15

:help option-list

:set or :set all

原创文章,作者:hunter,如若转载,请注明出处:http://www.178linux.com/32474