欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

马哥 07_01 _vim编辑器详解 有大用

vim 编辑器

文本编辑器,

ASCII文档,


字处理器

wps,word文档 有xml格式(其中一种修饰吧),作为修饰符,跟文档的内容没有关系,但是是作为有效数据的组成部分


linux  重要的哲学思想之一就是纯文本文件来保存软件的配置信息

一切皆文件


nano,sed


vi:Visual Interface  可视化接口

遵循GPI协定的一款开源软件,体积小.但功能异常强大

vim:VI IMproved,vi的增加版 是在 vi 功能的基础上添加扩展功能的插件而形成的 有着色功能

全屏编辑器,模式化编辑器 在不同的模式中,敲下的键盘理解的意义不一样

敲 d 删除   在插入模式下敲d 就是 d字母


#vim FILENAME

#vim /path/to/somefile   (如果 后面跟多个文件,能够打开的只有一个文件)

(默认情况下,父目录必须得存在)(文件可以存在也可以不存在,分别表示编辑,新建)


 vim 模式

 1)编辑模式(命令模式)  刚打开时的模式  (所有的击键命令被理解为编辑整个文档的,比如删除两行,复制三行,粘贴十行)

 2)输入模式(插入模式) (大多数敲键动作都会被当作输入到文件中的内容,而保存在文档当中)

 3)末行模式  整个屏幕的最下方,最后一行上,键入一些编辑命令,或其它的操作命令(可以输入很多除了编辑命令外的诸多文件管理命令)(提供的命令支持能力比编辑能力更多) (编辑文件或执行额外的操作)(末行模式的功能非常强大)


模式转换:

编辑-->输入:

    i:insert 在当前光标所在字符的前面转为输入模式(插入模式)

    a:append 在当前光标所在字符的后面转为输入模式(插入模式)

    o: open 在当前光标所在行的下方新建一行并转为输入模式(插入模式)

都有对应的大写

    I:在当前光标所在行的行首,转换为输入模式(插入模式)

    A:在当前光标所在行的行尾,转换为输入模式(插入模式)

    O:在当前光标所在行的上方新建一行并转为输入模式(插入模式)


(输入模式和末行模式,彼此之间不能直接转换)

输入-->编辑

    ESC

编辑-->末行

    :

末行-->编辑  

ESC   (有时一次不行,得两次) (没有键入内容的话,一次就够了(但我的电脑上好像都得两下))

:10 跳动第10行

:10d 删除第10行

:10,20d 删除第10至第20行

:set nu 显示行号

:! ls /etc  可以执行shell命令



1.删除当前行后面所有的行:

:,$d  (或者.,$d)

2.删除第一行到当前行:

:1,.d


(每次用了都忘记,此记)




image.png

技巧:

一,打开文件

1)打开文件后,直接让光标处在某个行上

vim +# 文件名  加号跟数字 处于多少行

vim + 文件名    直接加号,最后一行

vim +/PATTERN 文件名: 打开文件,定位至第一次被 PATTERN 匹配到的行首


    打开文件 默认处于编辑模式   模式之间可以转换

二,关闭文件

    在编辑或末行模式下完成

    1,末行模式下关闭文件   !感叹号是强行的意思

        :q (q表示退出,如果已经有内容更改,需要确认的)

        :wq     保存退出               (w 表示保存) (q退出)

        :q! 强行不保存退出

        :w 单独保存   (只读是存不了的,但只读对管理员是不生效的)

        :w! 强行保存 (强行保存,只有管理员才有这个权限)

        :wq 可以简写为 :x 

    2,编辑模式下退出

         ZZ 保存退出

         Ctrl+z,Ctrl+z (应该是不保存退出,应该是这样子的吧)

 

(添加一个字符,再删掉它 然后:q 仍然提示内容已更改,虽然内容一样,但 vim 认为你已经改内容了)


三,移动光标(编辑模式)

1,逐字符移动:

    h:右手 放键盘上 向左

    l:右手 放键盘上 向向

    j:右手 放键盘上 向下  (j日本 在下面)

    k:右手 放键盘上 向上  (k韩国,在上面)

#h:移动#个字符 (移动几位数字)

2,逐单词移动(以单词为单位进行移动)

    w:(word)移至下一个单词的词首

    e: (end)跳至当前或下一个单词的词尾

    b:(back backspace)跳至当前或前一个单词的词首

#w:移动#个单词 (移动几位数字)  (这些命令也都支持#数字)

3,行内跳转

    0:跳到行首(绝对行首)(包括前面的空白字符也算) (开始 开头)

    ^:跳到行首第一个非空白字符 (开始 开头)

    $:跳到行尾(绝对行尾)(包括后面的空白字符也算) (结束)

( 左括号在句子间跳转

) 右括号在句子间跳转

{ 左花括号在段落间跳转

} 右花括号在段落间跳转

4,行间跳转

#G: 跳转至第#行    (末行模式下 :#  比如 :6 敲回车,就到了第6行) (首行gg 或  1G)

G:最后一行


Vim如何跳转到光标的上次 (上一次) 位置

Ctrl + O (好像不对,又好像对)

Ctrl + I (好像不对,又好像对)
装了Ctag的插件可以跳转 Ctrl+】。查看函数调用。 


四,翻屏 (编辑模式下)

Ctrl+f:向下翻一屏

Ctrl+b:向上翻一屏

Ctrl+d: (down)向下翻半屏

Ctrl+u: (up)向上翻半屏


五,编辑命令 (编辑模式下)

x  删除光标所在处的单个字符 

#x 删除光标所在处及向后的共几个(#个)字符


六,删除命令:d (编辑模式下)

d 与前面的 移动光标 的命令(跳转命令)组合起来使用 .

比如 先按下d,再按$ 就删除当前至行尾的所有字符

比如 先按下d,再按0 就删除当前至行首的所有字符

比如 先按下d,再按w 就删除当前至下一个单词的词首的所有字符

可以跟数字组合起来使用 比如3dw 就删除当前至下三个单词(包括自己就3个)的词首的所有字

#dw,#de,#db 都比较常见    (删除光标跳转符指定范围的#个)


dd:删除当前光标所在行

#dd(或者 d#d )  :删除所括当前光标所在行在内的#行  删除当前光标所在及下面的共#行


末行模式下:

StartAD,EndADDd 

    . 点号表示当前行

    $美元符表示最后一行

    +# 向下的#行(相对地址表示法)

    $-1 表示倒数第二行

比如 :10,20d  表示删除从10行到20行的数据

:.,+5d   (一共删了6行,当前行及下面的5行)

:.,100d (从当前行到第100行)



vi 所删除的n个内容不会立即被清空(会被保存在缓冲区,即内存里),将来发现删错了,还可以撤回去(不光是删除)

刚刚删除的内容 还可以拿来粘贴到别的位置


七,粘贴命令p (paste)

p: 如果删除或复制的为整行内容,则粘贴到光标所在行的下方,如果删除或复制的为非整行,则粘贴到光标所在字符的后面

P:如果删除或复制的为整行内容,则粘贴到光标所在行的上方,如果删除或复制的为非整行,则粘贴到光标所在字符的前面


末行模式下的删除

:75,$d 这是从75行删除到最后一行

image.png


八,复制命令 y (yank)

    用法同d命令

末行模式下的复制 

:75,$y 这是从75行复制到最后一行

image.png


九,修改,先删除内容,再转换为输入模式

    c: (change)用法同d命令

cc 删除这一行转为输入模式

c$ 删除光标所在位置至行尾,然后转为输入模式


十, 替换:

 r (replace) :  它还是在编辑模式,不是插入模式(输入模式),也不是替换模式

#ra :就是把光标所在的字符替换成#个a字符 (一般很少这么用)


输入模式下 按 insert 键,则后面的字符逐个替换


R:替换模式  也不是逐个朝后推字符的  (敲 ESC 退出替换模式)此时面的字符也是逐个替换 



十一,撤销编辑操作

u: (undo) 撤销前一次编辑操作,连续按u,可以撤消前n次编辑操作,(一般来说vim编辑器只在内存缓冲区当中保存最近50次的操作,也就是说只能撤消最多50次的编辑)

可以使用  #u:直接撤销最近前#次的编辑操作


撤销最近一次的撤销操作 (反撤销)(恢复) :Ctrl+r

Vim如何跳转到光标的上次位置

Ctrl + O      (向后退)

Ctrl + I        (向前进)

装了Ctag的插件可以跳转 Ctrl+】。查看函数调用。

)



十二,重复前一次的编辑操作

. :点号


十三,可视化模式

v   按字符选取,可以鼠标划过选中,然后 按d ,就可以直接删除一大段内容 (也可以复制按y 回到输入模式,然后按 p 粘贴)

V  按矩形块选取 (光标所在行必须选中,且复制粘贴的是整行)


十四,查找 

/PATTERN 从光标处往尾部查找 从前往后查  (支持正则表达式)

?PATTERN 从光标处往首部查找 从后往前查  (支持正则表达式)

    n 表示下一个

    N 表示下一个(倒过来)


十五,查找并替换 (末行模式下)

:s  用法与 sed 一模一样 

ADDR1,ADDR2S@PATTERN@string@gi

例子 image.png :.,$-1s/he/HE/g

当前行至倒数第二行的所有的he 替换成 HE




[root@ebs-22618 ~]# cp /etc/inittab ./

[root@ebs-22618 ~]# vim inittab

[root@ebs-22618 ~]#

image.png


[root@ebs-22618 ~]# vim +12 inittab  打开这个文件的时候 处于 第12行

 image.png


[root@ebs-22618 ~]# vim + inittab  一个加号 表示处于文件的最后一行

image.png



[root@ebs-22618 ~]# vim +/initdefault inittab 定位到第一个 initdefault 所在处

image.png


image.png



[root@ebs-22618 ~]# cp /etc/rc.d/rc.sysinit ./

[root@ebs-22618 ~]# vim rc.sysinit





普通分类: