vim简介及高级用法

1.什么是 vim?

Vim是从 vi 发展出来的一个文本编辑器。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。简单的来说, vi 是老式的字处理器,不过功能已经很齐全了,但是还是有可以进步的地方。 vim 则可以说是程序开发者的一项很好用的工具。熟练掌握VIM的快捷键与功能使用,可以对我们的运维工作,Shell脚本编写提供更高的效率。

vi与vim

vi编辑器是所有Unix及Linux系统下标准的编辑器,他就相当于windows系统中的记事本一样,它的强大不逊色于任何最新的文本编辑器。他是我们使用Linux系统不能缺少的工具。由于对Unix及Linux系统的任何版本,vi编辑器是完全相同的,学会它后,您将在Linux的世界里畅行无阻。

vim 具有程序编辑的能力,可以以字体颜色辨别语法的正确性,方便程序设计;

因为程序简单,编辑速度相当快速。

vim可以当作vi的升级版本,他可以用多种颜色的方式来显示一些特殊的信息。

vim会依据文件扩展名或者是文件内的开头信息, 判断该文件的内容而自动的执行该程序的语法判断式,再以颜色来显示程序代码与一般信息。

vim里面加入了很多额外的功能,例如支持正则表达式的搜索、多文件编辑、块复制等等。 这对于我们在Linux上进行一些配置文件的修改工作时是很棒的功能。

vi/vim快捷键示意图 (初学可以打印出来贴显示器旁对着看,慢慢就全部记住了)

2.vi/vim 的基本使用

基键行为是依赖于vim的模式。基本上 vi/vim 共分为三种模式,分别是命令模式(Command mode),输入模式(Insert mode)和底线命令模式(Last line mode)。

命令模式

启动 vi/vim ,通过vim file 打开文件后,默认进入命令模式。命令模式通常可以移动光标,剪切/粘贴文本。此模式下敲击键盘动作会被Vim识别为命令,而非输入字符。比如我们此时按下i,并不会输入一个字符,i被当作了一个命令。

以下是常用的几个命令:

*  **i** 切换到输入模式,以输入字符。

*  I:移动光标到当前行行首,进行输入。

*  a:在光标所在处后面进行输入

*  A:移动光标到当前行行尾,在行尾进行输入

*  o:在光标所在行下方创建一个新行。

*  O:在光标所在行上方创建一个新行。

*  **x** 删除当前光标所在处的字符。

*  **:** 切换到**底线命令模式**,以在最底一行输入命令。

若想要编辑文本:启动Vim,进入了命令模式,按下i,切换到输入模式。命令模式只有一些最基本的命令,因此仍要依靠底线命令模式输入更多命令。

输入模式

在命令模式中按下** i **键,即进入的输入模式。在输入模式中可以使用以下按键。

*  **字符按键以及Shift组合**:输入字符

*  **ENTER**:回车键,换行

*  **BACK SPACE:**退格键,删除光标前一个字符

*  **DEL:**删除键,删除光标后一个字符

*  **方向键**:在文本中移动光标

*  **HOME**/**END**:移动光标到行首/行尾

*  **Page Up**/**Page Down:**上/下翻页

*  **Insert**:切换光标为输入/替换模式,光标将变成竖线/下划线

*  **ESC**:退出输入模式,切换到命令模式

底线命令模式

在命令模式下按下:(英文冒号)就进入了底线命令模式。底线命令模式可以输入单个或多个字符的命令,可用的命令非常多。

在底线命令模式中,基本的命令有(已经省略了冒号):

*  q 退出程序

*  q! 不存盘退出

*  w 保存文件

*  wq 保存并退出

*  x 保存退出(不建议使用)

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

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

*  !com 执行命令

*  r !com 读入命令的输出

按ESC键可随时退出底线命令模式。

3.VIM 三大模式的更多用法

在命令模式中:

快速移动光标

*  逐字符移动

    *  h:向左

    *  l:向右

    *  j:向下

    *  k:向上

    *    # h:移动#个字符

*  以单词为单位移动

    *  w:移到下一个单词的词首

    *  e:跳至当前或下一个单词的词尾

    *  b:跳至当前或上一个单词的词首

    *    #w:表示移动#个单词

*  行内跳转

    *  0:跳转至绝对行首

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

    *  $:跳转至绝对行尾

*  行间跳转

    *    # G:跳转到第#行

    *  G:最后一行

    *  1G,gg:跳转至第一行

*  句间移动

    *  ):跳转到下一句

    *  (:跳转到上一句

*  段落间移动

    *  }:跳转到下一段

    *  {:跳转到上一段

翻屏操作

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

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

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

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

字符编辑

*  编辑字符

    *  x:删除光标处的字符

    *    # x:删除从光标处开始的#个字符

    *  xp:对调光标所在的字符及其后面字符的位置。(x是剪切,p是粘贴)

    *  ~:转换光标字符大小写

    *  J:删除当前行后的换行符,合并

*  替换命令

    *  R:切换成替换模式

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

*  删除命令

    *  d:删除命令,可结合选择进行范围删除

    *  d$:从光标位置开始,删除到行尾

    *  d^:从光标位置开始,删除到行首

    *  dw: 删除到词尾

    *  de: 删除单词,从光标位置到词尾

    *  db: 删除上一个单词

    *  dd:删除光标所在行

    *    #dd:删除#行(多行删除)

*  复制命令

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

    *  y$:从光标处复制到行尾

    *  y0: 从光标处到行首第一个有字符的位置

    *  y^:从光标处到绝对行首

    *  ye: 复制单词

    *  yw

    *  yb

    *  yy:复制整行

    *    #yy:复制#行

*  粘贴命令

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

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

*  改变命令 (使用改变命令,就是先修改光标选择的位置,然后自动改变为插入模式),用法参考删除命令和黏贴命令,改变命令的关键词为:c

    *  c$

    *  c^

    *  ……

*  撤销命令

    *  u:撤销最近修改

    *    # u:撤销最近#次的修改

    *  U:撤销光标落在此行后所有的修改(**必须光标一直落在该行,如果光标移动到他行,再回来,缓存中会清空该行的撤销记录,无法撤销**)

    *  Ctrl +r 重做最后撤销掉的操作

    *  .重复前一次的操作

    *  n. 重复前一个操作N次

命令连用模式

100iddz [ESC] 粘贴“ddz” 100次

<start position><command><end position>

Command:

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

例如 0y$ 命令意味着:

0 → 先到行头

y → 从这里开始拷贝

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

这时按p就可以拷贝这些数据

在底线命令模式下:

*  地址定界:匹配到指定的行 格式:start_pos,end_pos

    *  # : 跳转到具体第#行,例如2表示第2行

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

    *  #,+# 从左侧#表示的起始行,加上右侧#表示的行数。(例如2,+3 表示2到5行

        . 当前行

    *  $ 最后一行(.,$-1 从当前行到倒数第二行)

    *  % 全文, 相当于1,$

    *  /pat1/,/pat2/(pat1和pat2为正则表达式,代表

        从第一次被pat1模式匹配到的行开始,一直到第一次被pat2匹配到的行结束。比如:  #,/pat/ , /pat/,$ , /^b/,/^l/d:删除以“b”开头到以“l”开头的行 )

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

        d(删除):2,5d—删除第2到第5行

        y(复制):2,5y—复制第2到第5行

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

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

*  查找命令

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

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

    *  n:与命令同方向

    *  N:与命令反方向

*  查找并替换内容

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

    *  要查找的内容:可使用模式(可使用正则表达式匹配)

    *  替换为的内容:不能使用模式,但可以使用\1, \2, …等后向引用符号;还可以使用“&”引用前面查找时查找到的整个内容

    *  修饰符

    *  i:忽略大小写

    *  g:全局替换(默认情况下每一行只替换第一次匹配到的)

    *  查找替换符中的分隔符/可替换为其他字符 :如 s#haha#hehe#g

可视化模式

*  允许选择的文本块

*  v 面向字符

*  V 面向行

*  ctrl-v 面向块

*  可视化键可用于与移动键结合使用:w ) } 箭头等,突出显示的文字可被删除,复制,变更,过滤,搜索,替换等 。

4.文件配置 – 定制自己专属的VIM

我们可以创建自己的配置文件,来配置VIM,让我们更便捷的进行文档编辑工作。配置文件需要放置在以下路径。

*  全局:/etc/vimrc

*  个人:~/.vimrc

相关参数:

*  行号

    *  显示:set number, 简写为set nu

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

*  忽略字符的大小写

    *  启用:set ic

    *  不忽略:set noic

*  自动缩进

    *  启用:set ai

    *  禁用:set noai

*  智能缩进

    *  启用:smartindent 简写 set si

    *  禁用:set nosi

*  高亮搜索

    *  启用:set hlsearch

    *  禁用:set nohlsearch

*  语法高亮

    *  启用:syntax on

    *  禁用:syntax off

*  显示Tab和换行符 ^I 和$显示

    *  启用:set list

    *  禁用:set nolist

*  文件格式

    *  启用windows格式:set fileformat=dos

    *  启用unix格式:set fileformat=unix

    *  简写: set ff=dos|unix

*  设置文本宽度

    *  启用: set textwidth=65 (vim only)

    *  禁用: set wrapmargin=15

*  设置光标所在行的标识线

    *  启用:set cursorline,简写cul

    *  禁用:set no cursorline

*  复制保留格式

    *  启用: set paste

    *  禁用: set nopaste

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342