Vim是一个高度可配置的文本编辑器,用于创建和更改任何类型的文本非常高效。与大多数UNIX系统和Apple OS X一起,它被包含为“vi”。Vim是稳定的,并且不断发展,变得更好。其特点是:持久的多级撤消树;广泛的插件系统;支持数百种编程语言和文件格式;强大的搜索和替换;与许多工具集成。
Vim是Vi IMproved,是编辑器Vi的一个加强版,一个极其强大并符合IT工程师(程序员、运维)习惯的编辑器。如果你是一名职业的SE,那么一定在寻找一款出色的能够自由定制、满足灵活编辑功能的编辑器。那么答案,就是vim或者Emacs。vim最大特色是完全使用键盘命令进行编辑,脱离了鼠标操作虽然使得入门变得困难,但上手之后键盘的各种巧妙组合操作却能带来极为大幅的效率提升。
在Linux系统中,RHEL和CentOS的配置文件是/etc/vimrc,Debian和Ubuntu的配置文件是/usr/share/vim/vimrc。
那么vimRC中的RC是什么意思?
一般在运行某个软件、环境或工具之初,要初始执行的一些命令,称为Run Commands,即RC。根据Wikipedia.org的记载,RC缩写的用法源自MIT的相容分时操作系统(Compatible Time-Sharing System,CTSS),有兴趣的话请自行了解。
作为一个程序员,不管是前端还是后端,工作中基本上都要跟服务器打交道,现在服务器里面运行的操作系统基本上都是 Linux,当你远程跟服务器通信的时候,基本上都要通过终端来跟服务器建立连接,当你要修改服务器的某个配置文件的时候,在一个黑漆漆的终端里,你能用的几乎只有 Vim,所以不会 Vim 的话,你就没办法工作;
基本上vi/vim可以分为三种状态,分别是普通模式、插入模式和命令模式,各模式的功能区分如下:
控制屏幕光标的移动,字符、字或行的删除,移动复制某区段。
只有在插入下,才可以做文字输入、删除,按「ESC」键可回到普通模式。可以按i、I、a、A、o、O、r、R即可。其中i和I表示插入(Insert),r和R表示替换(replace)。
将文件保存或退出vim,也可以设置编辑环境,如寻找字符串、列出行号等……可以按“:”、“/”、“?”。其中“:”表示输入vim命令,“/”表示后面输入要向下搜索的字符串,“?”表示后面输入要向上搜索字符串。
其实,可以把普通模式理解为常态,进入其它任何一种模式,需要某种特殊方式,而从其它特殊模式回到普通模式,就按「ESC」键即可。
为了使以下参数永久有效,那你可以把以下参数写进/etc/vimrc配置文件里,当然,有一些参数已经存在配置文件中了。
| 指令 | 作用 |
|---|---|
| syntax on | 开启代码高亮 |
| syntax off | 关闭代码高亮 |
| syntax enable | 开启代码高亮 |
| 指令 | 作用 |
|---|---|
| set hlsearch | 开启搜索高亮 |
| set nohlsearch | 关闭搜索高亮 |
| set incsearch | 输入搜索字符串的同时进行搜索 |
| set ignorecase | 搜索时忽略大小写 |
| 指令 | 作用 |
|---|---|
| set ruler | 开启光标位置提示 |
| set number | 显示行号 |
| set nonu | 不显示行号 |
| set cmdheight=1 | 命令部分高度为1 |
| 指令 | 作用 |
|---|---|
| set autoindent | 自动缩进 |
| set noautoindent | 不自动缩进 |
| set smartindent | 智能缩进 |
| set autoread | 当文件在外部被改变时,vim自动更新载入 |
| set showmatch | 显示匹配的括号 |
| 指令 | 作用 |
|---|---|
| i 小写字母i | 在光标位置插入 |
| a 小写字母a | 在光标的下一个位置插入 |
| I 大写字母I | 在光标所在行的第一个非空格处插入 |
| A 大写字母A | 在光标所在行的最后一个字符处插入 |
| o 小写字母o | 在光标所在行的下一行处插入新行 |
| O 大写字母O | 在光标所在行的上一行处插入新航 |
| r 小写字母r | 替换光标所在处的字符一次 |
| R 大写字母R | 持续替换光标所在处的字符,直到按下「ESC」键 |
| 指令 | 作用 |
|---|---|
| :w | 保存文件 |
| :w! | 强制保存文件(前提是用户有修改文件访问权限的权限) |
| :q | 退出缓冲区 |
| :q! | 强制退出缓冲区而不保存 |
| :wq | 保存文件并退出缓冲区 |
| :wq! | 强制保存文件并退出缓冲区(前提是用户有修改文件访问权限的权限) |
| :w [filename] | 另存为名为filename文件 |
| :r [filename] | 将另外一个文件读入到正在编辑的文件 |
| :n1,n2 w [filename] | 将n1行到n2行的数据另存为名为filename文件 |
| :x | 保存并退出 |
| ZZ | 保存并退出 |
| ZQ | 不保存退出 |
按下「ESC」键
按下「ESC」键
| 指令 | 作用 |
|---|---|
| h | 向左箭头键(←) 光标向左移动一个字符 |
| l | 向右箭头键(→) 光标向右移动一个字符 |
| j | 向下箭头键(↓) 光标向下移动一个字符 |
| k | 向上箭头键(↑) 光标向上移动一个字符 |
| $ | 光标移动到行尾(End),注意要按「Shift」键 |
| 0 | 光标移动到行首(Home) |
| ^ | 光标移动到行首第一个非空白字符(Home),注意要按「Shift」键 |
| 指令 | 作用 |
|---|---|
| w | 光标移动到后一词的词首 |
| W | 光标移动到后一词的词首且忽略标点符号 |
| e | 光标移动到后一词的词尾 |
| E | 光标移动到后一词的词尾且忽略标点符号 |
| b | 光标移动到前一词的词首 |
| B | 光标移动到前一词的词首且忽略标点符号 |
| 指令 | 作用 |
|---|---|
| G | 光标移动到文件的最后一行的第一个非空白字符 |
| nG/ngg | 光标移动到文件的第n行,相当于”:n” |
| gg | 光标移动到文件的第1行的第一个非空白字符 |
| 指令 | 作用 |
|---|---|
| Ctrl + f | 向下翻页(Pagedown) |
| Ctrl + b | 向上翻页(Pageup) |
| Ctrl + d | 向下翻半页 |
| Ctrl + u | 向上翻半页 |
| 「H」 | 光标移动到目前显示页的第一行 |
| 「M」 | 光标移动到目前显示页的中间行 |
| 「L」 | 光标移动到目前显示页的最后一行 |
| 指令 | 作用 |
|---|---|
| Ctrl + o | 回到光标的上一位置 |
| 指令 | 作用 |
|---|---|
| dd | 删除光标所在行 |
| ndd | 删除从光标所在行开始,向下的n行 |
| d1G | 删除从光标所在行开始,到第一行的所有行 |
| dG | 删除从光标所在行开始,到最后一行的所有行 |
| d$ | 删除从光标所在位置,到行尾的所有字符 |
| d0 | 删除从光标所在位置,到行首的所有字符 |
| x | 每按一次,删除光标所在位置的“后面”一个字符 |
| nx | 删除光标所在位置的“后面”n个字符 |
| X | 大写的X,每按一次,删除光标所在位置的“前面”一个字符 |
| nX | 删除光标所在位置的“前面”n个字符 |
| 指令 | 作用 |
|---|---|
| yy | 复制光标所在行 |
| nyy | 复制从光标所在行开始,向下的n行 |
| y1G | 复制从光标所在行开始,到第一行的所有行 |
| yG | 复制从光标所在行开始,到最后一行的所有行 |
| y$ | 复制从光标所在位置,到行尾的所有字符 |
| y0 | 复制从光标所在位置,到行首的所有字符 |
| J | 将光标所在行与下一行合并成一行 |
| yw | 复制当前光标所在的字母到该单词的最后一个字母 |
| yaw | 复制当前光标所在的单词 |
| 指令 | 作用 |
|---|---|
| p 小写字母p | 粘贴剪贴板中的数据,从光标所在行的下一行开始 |
| P 大写字母P | 粘贴剪贴板中的数据,从光标所在行的上一行开始~ |
| 指令 | 作用 |
|---|---|
| u | 撤销上一个操作 |
| 指令 | 作用 |
|---|---|
| . | 重复上一操作 |
| 指令 | 作用 |
|---|---|
| r | 替换光标所在处字符 |
| R | 进入替换模式,直至按ESC退出 |
| cc | 替换光标所在行 |
| cw | 替换光标所在的英文单词 |
| ~ | 转换大小写 |
| :n1,n2s/old/new/g | 从n1到n2行将old替换成new,g表示全部替换 |
| :1,$s/old/new/g | 将整个文件的old替换成new |
| :1,$s/old/new/gc | c表示确认 |
| 指令 | 作用 |
|---|---|
| :le | 光标所在行左对齐 |
| :ri | 光标所在行右对齐 |
| :ce | 光标所在行居中 |
| 指令 | 作用 |
|---|---|
| :history | 显示最近在vim里面输入的历史 |
| 指令 | 作用 |
|---|---|
| /string | 向下搜索字符串“string” |
| ?string | 向上搜索字符串“string” |
| 指令 | 作用 |
|---|---|
| n | 根据上次搜索条件找到下一个匹配的字符串 |
| N | 根据上次搜索条件找到上一个匹配的字符串 |
| 指令 | 作用 |
|---|---|
| :files | 显示目前打开了哪些文件 |
| :n | 切换到下一个缓冲区内容 |
| :N | 切换到上一个缓冲区内容 |
| :2n | 切换到下下个缓冲区内容 |
| :bn | 下一个缓冲区内容(buffer next) |
| :bp | 上一个缓冲区内容(buffer previous) |
| 指令 | 作用 |
|---|---|
| :sp [filename] | 打开一个新的缓冲区,如果有filename则内容为该文件,否则为当前文件 |
| Ctrl+w n | 新建一个缓冲区 |
| Ctrl+w q | 退出光标所在的缓冲区 |
| Ctrl+w j | 光标移动到下一缓冲区 |
| Ctrl+w k | 光标移动到上一缓冲区 |
| Ctrl+w l | 光标移动到右一缓冲区 |
| Ctrl+w h | 光标移动到左一缓冲区 |
| Ctrl+w v | 左右切割窗口新建缓冲区 |
| Ctrl+w s | 上下切割窗口新建缓冲区 |
| Ctrl+w o | 使光标所在缓冲区最大化,其他缓冲区隐藏 |
当你用vim打开或新建一个文件时,如果加上-x参数,即:
# vim -x test.txt --打开你要加密的文本文件
那么vim会提示你:
Enter entryption key:
当你输入了密码后,vim会提示你重复输入以确认:
Enter same key again:
当你在设置密码的时候,是以*来显示的,非明文。打开文件之后,:wq保存退出,密码才生效。
当下次有人(包括你自己)打开该文件的时候,vim就会提示:Enter encryption key:
这时你只要输入你之前所设置的密码就可以了。如果你输入的密码是错误的,vim并不会提示你密码错误,而是显示一堆无意义的垃圾代码。
打开你已经加密的文件,然后输入:
# vim test.txt --打开加密文件之后,输入下面内容
:set key=
这样,你的密码就被设置为空了,今后进入就不再需要输入密码了。而如果你向重设密码的话,你可以输入:
:X
注意是个大写字母X。这时vim会提示你,只要反复输入两次新的密码就可以了:
Enter entryption key: *****
Enter sanme key again: *****
如果是清除密码,连续敲两次键盘就可以了
注意:
加密、解除密码、重设密码之后,一定要保存之后才能生效。
如果密码输入错误,vim不会拒绝访问者编辑文件。在这种显示乱码的情况下编辑文件并保存,整个文件就会变得混乱不堪,无法辨识。今后即使使用正确的密码打开文件,也看不到正确的文档了。