(本文仅记录了Vim常用的按键功能和操作,用于备忘和查阅。若为Vim小白,建议先通过列出的参考资源获得对Vim更全面的了解。Vi 是几乎所有Linux发行版都支持的文字编辑工具,也是许多Linux下工具的默认文本编辑工具,而Vim则是其功能加强版。)

  vim的模式

  Vim一般分为三种不同的模式,普通模式( normal mode )、编辑模式和命令模式.

  普通模式( normal mode )

  使用vim打开文件则进入普通模式。在普通模式下可通过按键 h、j、k、l来控制光标的移动,通过 x、d(delete) 、 y(yank) 、p(put)等按键可对文本进行操作,在该模式下,键盘按键被视为类似 Word下的快捷键的功能,而不是被视为简单的文本输入。

  编辑模式

  在编辑模式下可对文件内容进行编辑。编辑模式下按键输入均被视为文本输入,而不再具备普通模式下的各种功能。用户可以通过按键ESC从编辑模式返回普通模式。

  命令模式

  在普通模式下,键盘输入 ' : '、 ' / '、 ' ? '则光标移动至界面最下行,并等待进一步输入。之后Vim会根据用户输入执行相应的动作,如保存和退出、查找和替换、执行外部命令等。命令模式下同样通过ESC键返回普通模式。

  

  文件的打开与保存

  用户可通过命令行输入 vim filename 的方式打开文件名指定的文件,通过在命令模式下输入对应指令模式的方式进行文件的保存等操作。

    vim filename   //打开名为filename的文件
:w //保存修改至源文件
:wq //保存修改并退出
:q! //不保存修改,直接退出
:w filename //保存修改(选中的部分)至filename(其中filename为不存在重名的新文件)

  在某些情况下,如当前用户对该文件没有修改权限时(但可以通过权限提升得到更大的权限时),需要在命令后面加入' ! ',表示强制的意思,但具体能否写入还是由其最终的权限能否修改文件决定的。

  这里可以看到,输入' : '进入命令模式后,按键 w 即为保存命令,除了可进行文件整体保存外,还可以对特定选中的文本部分进行保存,如何进行文本选择下有介绍。   

  文件编辑

  在普通模式下,用户可以借助诸多的功能按键对文件已有的内容进行修改和调整,但想要具体改变和输入新的文本内容,则仍需要进入编辑模式,在编辑模式下除ESC外,其他的按键均被视为正常的按键输入。进入编辑模式可以有多种不同的方式。

    i    //insert即插入模式,从光标所在位置开始插入,即插入的内容位于原光标所在位置字符之前
I //从光标所在行的行首开始插入
a //append即附加模式,从光标所在位置之后附加,即新增内容位于原光标所在位置字符之后
A //从光标所在行的行末开始附加
o //在光标所在行的下一行加入新一行
O //在光标所在行的上一行加入新一行
R //进入替换模式,屏幕下方会出现Replace提示,此时的输入会直接替换光标所在位置的字符,与Windows下的 0 作用类似,同样通过ESC键返回

  用户可以根据不同的需要将光标移动(见下)到合适的位置,再通过对应的功能键进入编辑模式进行文本编辑,编辑完成后,通过ESC键返回普通模式。

  光标移动(一)

  在普通模式(也就是 vim 打开文件后的默认模式)下,用户可通过以下按键进行光标的移动。

      k            //  h -光标左移
  h l     // l -光标右移
  j       // j -光标下移(形似向下的箭头)
// k -光标上移

 

  光标移动(二)

  普通模式下,vim 还支持以单词和行为度量的移动方式。

    w        //移动至下一个单词的第一个字符(该字符前一个字符为空白字符)
e //移动至单词的最后一个字符(即后一个字符为空白字符)
$ //移动至行尾
//移动至行首

  光标移动(三)

   上述关于光标移动的按键可以与数字结合使用,解释为重复操作若干次,格式为: 数字 + 移动方式。示例如下:

    3j            //下移三格
4h //左移4格
2w //移动至第二个单词的词首字符
3e //移动至第三个单词的词尾字符

  通过上述的 h、j、k、l和 w、e、$、0以及上述操作与数字的结合,实现不借助鼠标的快速光标移动。

  其他可用的光标移动

    Ctrl+f      //屏幕向下移动一页,相当于PageDown
Ctrl+b    //屏幕向上移动一页,相当于PageUp
H       //移动至屏幕中第一行的第一个字符
M       //移动至屏幕中中间行的第一个字符
L //移动至屏幕中最低行的第一个字符

  删除操作

    x        //删除光标所在处的字符(其大写形式X为将光标之前的字符删除,相当于Backspace)
dd  //删除光标所在行的操作(常用)

   d即为delete,除了dd外,d指令可与上述光标移动操作结合使用

    dw         //删除一个单词
d3w  //删除三个单词
d$ //删除光标所在处至行尾的字符
d4l //删除光标所在处起的四个字符
d2j //删除两行

   同样的,如 2dd 指令则表示将dd指令重复两次,即为删除两行操作,2d2w 则表示将 d2w 操作执行两次,即删除四个单词。

 

  复制与粘贴

   复制和粘贴借助多个指令的协作完成。包括复制y(yank),粘贴p(put)和虚拟选择v(visual selection).

    p                    //put命令,将剪贴的内容(注意,既可以是复制的内容,也可以为之前删除的内容)放置在光标后的位置,其大小字母P则表示放置在光标之前的位置
v //进入虚拟选择模式(visual selection),被选择的文本段被高亮显示(v的选择对象为字符,对应的大写字母V则是以行为单位选择)
  Ctrl + v        //以矩形框的形式进行内容选择
y //复制通过 v 操作选择的文本,或则其本身也可以与光标移动指令一同使用
//如y5w,则复制5个单词(注意复制是从光标所在处开始的)

  复制即通过 v 指令选定文本段,通过 y 指令复制内容,再通过 p 指令将文本放置在指定位置;

  剪切即通过 v 指令选定文本段,通过 d (或 x )指令删除内容,再通过 p 指令将文本放置在指定的位置;

   p 指令除了用于复制内容的粘贴外,还可以将上一次删除的内容粘贴在指定的位置,故而可以达到类似剪切的效果。对于 v 指令选中的文本,可以进行多种操作,包括复制(y)、删除(x/d)、另存(:w filename)等,读者完全可以自行进行组合尝试。

  指令y和d的指令形式有许多相同之处,除了均有yy和dd这种针对一行内容的处理指令外,指令y可以与光标移动指令相结合,得到更好的使用效果。

    yy    //复制光标所在行的内容
y0 //复制光标所在位置至行首的内容
y$ //复制光标所在位置至行尾的内容
yG //复制光标所在位置至文本结束的内容
ynG //复制指令与nG指令的结合
      //以及诸如y3w、y3j等指令

  行跳转

  通过与 g(goto) 相关的指令实现以行为单位的跳转指令。

    gg        //跳转至文件第一行
G //跳转至文件最后行
nG //跳转至文件第 n 行

  另外,通过快捷键 Ctrl + o 可以返回之前光标所在的位置(是针对gg等行跳转操作而言的上一个位置)。

  撤销操作

  与u(undo)相关的指令实现指令撤销

    u            //撤销上一次操作
U //撤销对光标所在行的所有操作
Ctrl+r   //重做上一操作

  替换和修改

  文本的替换和修改主要使用替换r(replace)和修改c(change)指令完成。

    rc            //其中c为字符,则将光标所在处的字符替换为c

  修改指令将指定的范围内的内容删除,并进入编辑模式,从而使得用户可以修改某一部分的文本。指令c与光标移动指令结合使用。用户修改完毕后,需使用ESC返回普通模式。

    ce        //删除光标所在处至词尾的所有内容,并进入编辑模式,供用户修改
c3w  //删除光标所在处其的三个词,并进入编辑模式
c$ //删除光标所在处至行尾的所有字符,并进入编辑模式
c0 //删除光标所在处至行首的所有字符,并进入编辑模式

  查找

  使用 / 与 ?进行不同方向的关键字查找,使用方式与Linux下的man page相似。 

    /keyword         //按默认方向查找关键字
?keyword //按与默认方向相反的方向查找关键字
n //按与之前相同的查找顺序匹配下一个出现相同关键字的位置
N //按与之前相反的查找顺序匹配下一个出现相同关键字的位置
          //用户也可以通过Ctrl + o 和 Ctrl + i 进行位置的切换

  替换

  替换指令可以视为是进入命令模式后借助s(substitute)指令完成。

    :s/old/new           //将光标所在行出现的第一个old替换为new(仅对该行的第一个old)
:s/old/new/g   // 将光标所在行出现的所有old替换为new
:s/old/new/gc   //同上,替换之前提示用户确认是否替换
:n,ms/old/new/g   //在n和m指定的行之间进行检查和替换
:%s/old/new/g    //针对整个文本进行替换

 

  执行命令

  普通模式下,通过键入' : ',使得光标移动至屏幕最下方的行,再键入有效指令,即可由Vim执行。之前介绍的文件的保存和退出、替换等都是这样实现的。Vim还可以支持多样的命令。

  文件保存

  之前介绍的文件保存的主要对象是完整的文件,实际上用户也可以借助w(write)指令将部分文本进行保存。

  (1)通过 :w filename 将整个文件保存至新建的filename文件中;  

  (2)使用虚拟选择指令v ( V / Ctrl + v )等选中指定文本内容,再通过 :w filename 保存至新建的文件中,则只会保存选中的文本段。这种方式下,屏幕下方的提示符如图所示

  

  (3)通过 :n,m w filename 将文本的n到m行保存至新建文件 filename 中;

  执行外部指令

    :! command    //离开Vim并在终端下执行command指令,结果会直接显示,可通过ESC返回 

  文件内容导入  

    :r filename    //将filename指定的文件内容插入至光标所在行的上一行
:r !command  //将命令执行的结果插入文本

  

  其他有用的快捷键

  (1)通过 Ctrl + g 键可以获得文件相关的信息,如文件名,光标所处的行列号等信息;

  

  (2)Ctrl+f 屏幕向下移动一页,相当于PageDown,Ctrl+b屏幕向上移动一页,相当于PageUp按键;

  (3)通过 % 键跳转至与之匹配的括号处(包括 {}、[]、()等);

  (4)通过 . 键重复之前一个动作;

(5)通过Ctrl + d 显示可能匹配的命令,通过Tab 补全指令。命令模式下输入 h ,使用Ctrl + d 键,即会显示出所有的以 h 开头的命令。同样的,对于未完成的命令或文件名,使用Tab键,则Vim会尝试完成输入,当有多个正确的匹配时,按Tab键则会进行切换。

  以上部分即为在常规使用 vim 的过程中所需的大多数功能按键和使用方法,文章的其余部分介绍更多关于 vim 的配置等相关的内容,有进一步个性化设置 vim 需求的可以做进一步的了解。

  

  修改编辑选项

  通过Vim的的set命令(命令模式下,需首先输入 ' : ' )改变编辑器的默认选项。常用的一些选项见下,在对应选项前加入前缀 no 即为取消对应选项。当 ~/.vimrc文件存在时,set的设置则会修改该文件中配置信息,相应的,也可以通过直接修改该配置文件中的内容修改配置(见下)。

    :set nu         //显示行号,相应的set nonu则为不显示行号
:set ic  //搜索忽略大小写(ignore case),取消即为 set noic
:set hlsearch //搜索时匹配的结果高亮显示
:set incserch //设置搜索时的搜索顺序
//可以看到,在对应的选项前面加入前缀no即表示取消取消对应的选项
:set ruler    //右下角展示状态栏
:set //显示与系统默认设置不同的参数情况,即被修改过的参数情况
:set syntax on  //设置Vim会根据语法以不同颜色显示不同的内容
:set syntax off

  通过命令模式下的set all 命令,可以查看当前所有的vim设置情况。通过命令 help set 也可以查阅一些关于Vim的设置帮助。

  查看帮助

  在命令模式下输入 help ,则会打开一个新的帮助文件,可以通过:q来返回。通过加入参数来查询对应的帮助.

    :help             //打开帮助文件
:help w       //打开指令对应的帮助文件
:help user-manual

  实际上,该命令是通过Vim打开了位于/usr/share/vim中的帮助文档(笔者的机器的路径为/usr/share/vim/vim74/doc),即相当于使用Vim进行多文件操作。简单的返回方式即为在帮助文档界面键入 :q即可。

 

  相关文件

  配置文件~/.vimrc

  Vim作为一个强大的编辑工具,其本身具有众多的环境参数选项,规定了编辑风格、界面显示等众多的内容。其环境参数的设置主要通过配置文件进行记录。其中位于/etc目录下的配置文件(笔者Ubuntu环境下为/etc/vim/vimrc)规定的是关于Vim的全局设置。而针对个人用户的个性化设置则通过个人用户目录下的~/.vimrc文件完成(不存在时可自行新建)。该文件中 " 符号为注释符号。

    cp /etc/vim/vimrc    ~/.vimrc    //将源文件复制到用户主目录中

  通过在.vim中添加配置信息或取消其中的注释,即可进行vim的配置功能。如去除 syntax on 前的注释从而打开语法高亮等。

  在 NJU ICS Lab 中找到一些可用的 vim 设置选项如下,下列设置也包含了 vim 设置的基本用法和功能,用户可以根据自己的需求添加,原网页见这里.

    setlocal noswapfile " 不要生成swap文件
set bufhidden=hide " 当buffer被丢弃的时候隐藏它
colorscheme evening " 设定配色方案
set number " 显示行号
set cursorline " 突出显示当前行
set ruler " 打开状态栏标尺
set shiftwidth= " 设定 << 和 >> 命令移动时的宽度为 4
set softtabstop= " 使得按退格键时可以一次删掉 4 个空格
set tabstop= " 设定 tab 长度为 4
set nobackup " 覆盖文件时不备份
set autochdir " 自动切换当前目录为当前文件所在的目录
set backupcopy=yes " 设置备份时的行为为覆盖
set hlsearch " 搜索时高亮显示被找到的文本
set noerrorbells " 关闭错误信息响铃
set novisualbell " 关闭使用可视响铃代替呼叫
set t_vb= " 置空错误铃声的终端代码
set matchtime= " 短暂跳转到匹配括号的时间
set magic " 设置魔术
set smartindent " 开启新行时使用智能自动缩进
set backspace=indent,eol,start " 不设定在插入状态无法用退格键和 Delete 键删除回车符
set cmdheight= " 设定命令行的行数为 1
set laststatus= " 显示状态栏 (默认值为 1, 无法显示状态栏)
set statusline=\ %<%F[%*%M%*%n%R%H]%=\ %y\ %(%{&fileformat}\ %{&encoding}\ Ln\ %l,\ Col\ %c/%L%) " 设置在状态行显示的信息
set foldenable " 开始折叠
set foldmethod=syntax " 设置语法折叠
set foldcolumn= " 设置折叠区域的宽度
setlocal foldlevel= " 设置折叠层数为 1
nnoremap <space> @=((foldclosed(line('.')) < ) ? 'zc' : 'zo')<CR> " 用空格键来开关折叠

  记录文件~/.viminfo

  文件 ~/.viminfo 记录了用户使用Vim进行的操作情况,多用于类似于指令撤销(u)和重做(r)的操作。

  参考资源

  鸟叔的Linux私房菜 : 第十章.vim程序编辑器

  Linux: 命令vimtutor

  Vim Tips Wiki

Vim常用命令记录的更多相关文章

  1. vim 常用命令(记录)

    很好的vim讲解:https://blog.csdn.net/weixin_37657720/article/details/80645991 命令模式:默认模式.输入ctrl+c, 输入:,转换为命 ...

  2. [转]vim常用命令

    [转]vim常用命令 http://www.cnblogs.com/sunyubo/archive/2010/01/06/2282198.html http://blog.csdn.net/wooin ...

  3. 自己用到的vim常用命令

    一.前言 这里整理的是我在实习期间用到的常用vim命令,特记录如下,以免忘记. 二.vim常用命令 1.vim中的光标移动 shift+6(^):跳到行首(第一个非空格字符)(注:在shell跳到行首 ...

  4. Vim常用命令及配置方案

    Vim常用命令及配置方案   几句话 很久之前就接触到vim,初学那阵觉得vim很酷炫,但确实对新手不是很友好.我也就简单看了下基本操作就上手了,但又不是长期在vim下工作,这就导致了每一次重新使用v ...

  5. Vim常用命令总结

    Vim常用命令总结: 下文是小编自己整理的关于日常linux vim编程过程中用的一些常用命令,资料参考鸟哥的 如果有需要的小伙伴可以参考一下!(底部有下载地址) 一. 一般模式可用的按钮说明 1.1 ...

  6. vim常用命令(iOS)

    iOS下vim的使用: vim 的三种模式: .一般模式(默认) .插入模式(写文字) .命令行模式(保存) 各种模式的功能区分如下: .一般模式:控制屏幕光标的移动,字符和光标的删除,移动复制某区段 ...

  7. 实用手册:130+ 提高开发效率的 vim 常用命令

    Vim 是从 vi 发展出来的一个文本编辑器.代码补完.编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用.和 Emacs 并列成为类 Unix 系统用户最喜欢的编辑器.这里收录了130+程 ...

  8. vim常用命令汇总

    vim常用命令汇总: http://www.cnblogs.com/softwaretesting/archive/2011/07/12/2104435.html 定位 本行第一个字符 ctrl+$ ...

  9. vim常用命令 vim键盘布局

    vim键盘布局,vim快捷键 vim常用命令:

随机推荐

  1. 问题集录--Android:解决Studio新建项目时,在 Building gradle project info 一直卡住

    Android Studio导入项目的时候,一直卡在Building gradle project info这一步,主要原因还是因为被墙的结果.gradle官网虽然可以访问,但是速度连蜗牛都赶不上.. ...

  2. NDK编程jni学习入门,声明native方法,使其作为java与c的交互接口

    首先,新建工程,简历一个jave类,在其中声明native方法,关键字为native,表面这个方法是从java以为的语言实现. 其次,要实用javac编译此java文件(javac是jdk中的命令,需 ...

  3. Java jxl导入excel文件,导入的数字、身份证号码、手机号变成了科学计数法,解决方案

    原文出自:https://blog.csdn.net/seesun2012 这是一个execl文件导入数据库操作,使用jxl解析execl导入数据库过程出现了科学计数法,与想要导入的数据不匹配,以下是 ...

  4. 一:XML知识整理

    一:xml 1. xml简介 a) xml, eXtensible Markup Language, 可扩展标记语言.是一种标记语言. b) xml 是一种非常灵活的语言, 没有固定的标签, 所有的标 ...

  5. php index.php修改之后未生效

    php index.php修改之后未生效 PHP项目修改了index.php 里面的代码,提交服务器之后,代码功能未生效, 解决办法:重启fpm 命令如下: /etc/init.d/php5-fpm ...

  6. redis使用及配置之缓存详解

    redis使用及配置之缓存详解 1.Redis的介绍 Redis是一个Key-Value存储系统.它支持存储的value类型有:string(字符串),list(链表), set(无序集合),zset ...

  7. Microsoft ReportViewer 控件类型版本兼容问题及解决方法

    错误 Parser Error Message: The base class includes the field 'rvEquipment', but its type (Microsoft.Re ...

  8. 一步一步实现web程序信息管理系统之二----后台框架实现跳转登陆页面

    SpringBoot springboot的目的是为了简化spring应用的开发搭建以及开发过程.内部使用了特殊的处理,使得开发人员不需要进行额外繁锁的xml文件配置的编写,其内部包含很多模块的配置只 ...

  9. laravel开发之-安装汉化语言包

    第一种方法: 1.输入命令:composer require "overtrue/laravel-lang:dev-master" 2.将config/app.php中命令“Ill ...

  10. 用WebStorm开发TypeScript

    为什么是TypeScript 最近在做H5的游戏,最终选定的TypeScript作为开发语言.主要是看重他有强类型和Class,作为习惯使用AS3,Java等强类型编程的人来说,还是习惯这种编程写法. ...