下面是最近学习vim的一些知识点总结
***博客园--邦邦酱好***
1.介绍
linux在文字接口下的文书编辑器有:emacs,pico,nano,joe与vim等。
为何要学vim(vim是vi的进阶版本)
(1)几乎所有的系统都会内建vi,其他的编辑器不一定存在
(2)很多个别软件的编辑器接口都会主动呼叫vi
(3)vim具有程序编辑的能力,主动以字体颜色辨别语法的正确性
(4)程序简单,编辑速度相当快速
(vi模式下编辑窗口右下角不会显示行号。)
2.vi共分为三种模式:一般模式,编辑模式,指令列命令模式
(1)vi打开文档,直接进入一般模式。
在这个模式中你可以使用【上下左右】按键来移动光标,可以使用【删除字符】或者【删除整行】来处理文档内容,也可以使用【复制粘贴】来处理你的文件数据。
(2)按下【i,I,o,O,a,A,r,R】后才从一般模式进入编辑模式。要回到一般模式时,必须按下【Esc】键才可退出编辑模式。
(3)按下【:/?】三个中的任何一个按钮,就可以将光标移动到最底下那一行,这时从一般模式进入指令列命令模式(编辑模式和指令列模式之间不可切换)。它可提供你搜寻资料,读取,存盘,取代字符,离开vi,显示行号等动作。
3.一般模式下移动光标的方法
(1)h或向左箭头键:向左移动一个字符
(2)j或向下箭头键:向下移动一个字符
(3)k或向上箭头键:向上移动一个字符
(4)l或向右箭头键:向右移动一个字符
(5)向*移动N行:输入N,再按下对应的动作
(6)ctrl+f:向下移动一页
(7)ctrl+b:向上移动一页
(8)ctrl+d:向下移动半页
(9)ctrl+u:向上移动半页
(10)N<space>:输入N,再按space空格键,光标会向右移动N个字符
(11)0或者home键:移动到这一行的最前面字符处
(12)$或End键:移动到这一行的最后面字符处
4.一般模式下搜索与取代的方法
(1)/word:在当前光标向下搜索,word是想要搜索的字符串,输入/word后,按下enter键即可。
(2)?word:在当前光标向上搜索,word是想要搜索的字符串,输入?word后,按下enter键即可。
(3):n1,n2s/word1/word2/g:在第n1和n2行之间寻找word1这个字符串,并取代为word2
(4):1,$ss/word1/word2/g:在第1行开始到最后一行寻找word1这个字符串,并取代为word2
(5):1,$ss/word1/word2/gc:在第1行开始到最后一行寻找word1这个字符串,并取代为word2,并在取代前给予用户确认
5.一般模式下的删除,复制与粘贴
(1)x,X:在一行字中,x向后删除一个字符;X为向前删除一个字符
(2)Nx:向后连续删除N个字符
(3)dd:删除光标所在的那一整行
(4)Ndd:删除光标所在的向下N行
(5)d1G:删除光标所在到第一行的所有数据
(6)dG:删除光标所在到最后一行的所有数据
(7)d0:删除光标到该行最前面的一个字符
(8)d$:删除光标到该行最后的一个字符
(9)yy:复制光标所在的那一行
(10)Nyy:复制光标所在的向下N行
(11)y1G:复制光标所在到第一行的所有数据
(12)yG:复制光标所在到最后一行的所有数据
(13)y0:复制光标所在字符到该行行首的所有数据
(14)y$:复制光标所在字符到该行行尾的所有数据
(15)p,P:p为把复制的数据在光标的下一行进行粘贴;P为把复制的数据在光标的上一行进行粘贴
(16)u:复原上一个动作
(17)ctrl+r:重做上一个动作
(18).:小数点,代表重复前一个动作
6.编辑模式下可用的按键
(1)i,I:进入插入模式。i为从当前光标处插入;I为在当前所在行的第一个非空格符处开始插入。
(2)a,A:进入插入模式。a为从当前光标所在的下一个字符处开始插入;A为在当前所在行的最后一个字符处开始插入。
(3)o,O:进入插入模式。o为从当前光标所在的下一行插入新的一行;O为在当前所在行的上一行插入新的一行。
(2)r,R:进入插入模式。r只取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下ESC键为止
7.指令列模式下可用的按键
(1):w:将编辑的数据写入文档
(2):w!:若文件属性为【只读】时,强制将编辑的数据写入文档。最后能否写入跟系统账户权限有关。
(3):q:离开vi
(4):q!:若修改过文档,不想保存,使用!为强制离开并且不存储文档
(5)ZZ:若文档没修改,则离开;若文档有修改,则保存后离开
(6):w[filename]:将编辑的数据存储成另一个文档
(7):r[filename]:将另一个文档的数据追加到光标当前所在的位置后面
(8):n1,n2 w [filename]:将第n1到n2行的数据存储成另一个文档
(9):!command:暂时离开vi到指令列模式下执行command的结果
(10):set nu:显示行号
(11):set nonu:取消显示行号
8.vim的暂存档,救援恢复与开启时的警告信息
(1)介绍
当我们使用vim编辑filename文档时,vim会在filename的当前目录下再建立一个名为.filename.swp的暂存档。你对filename的动作都会记录到这个暂存档中。如果系统由于某些原因断线了,导致编辑的文档没有存储,这时候.filename.swp就能发挥救援恢复功能了。
(2)模拟系统断线
打开文档进行编辑后,在vim的一般模式下,按下ctrl+z键,vim就会被丢到背景去执行。接下来直接关闭终端面板。这就等于系统断线,刚刚对文档的操作没有被保存到。
(3)开启时的警告信息
在系统断线后,再次打开该文档vim filename,就会出现警告信息
问题一:可能与其他人同时编辑这个档案-->找到另一个人请他结束对文档的操作。或者选择开启只读(O)模式
问题二:系统不知名原因导致vim中断-->如果之前的vim动作没有保存,可以按下R(ecover),这时vim会载入.filename.swp的内容来恢复文档。
注意:恢复文档后,.filename.swp不会自动删除,记得要手动删除它,否则每次打开filename都会有警告信息。
9.区块选择
(1)按键
v:字符选择,会将光标经过的地方反白选择
V:行选择,会将光标经过的行反白选择
ctrl+v:区块选择,可以用长方形的方向选择资料
y:将反白的地方复制
d:将反白的地方删除掉
(2)应用
第一步:进入文档,光标移动到某处,在一般模式下按下ctrl+v键,这时按下左右上下键进行区块选择
第二步:按下y键进行复制,这时反白的区块会消失
第三步:移动光标到想要粘贴的地方,在一般模式下按下p键进行粘贴操作
10.多文档编辑
(1)难题:每个vim是独立的,无法在vim1的文档A中进行nyy操作,再去vim2的文档B中进行p操作。
(2)解决:使用指令在一个vim下同时打开多个文档进行编辑-->vim file1 file2
(3)按键(一般模式下使用):
:n:编辑下一个文档
:N:编辑上一个文档
:files:列出目前这个vim开启的所有文档
11.多窗口功能
(1)难题:有一个文档很大,需要对比前后的数据,如果使用下一页ctrl+f,上一页ctrl+b来跑前跑后查阅会非常不方便。
(2)解决:在同一个vim中生成多个窗口
第一步:打开一个文档vim file1,在一般模式下输入“:sp”,就会生成另一个窗口,显示的文档也是file1
第二步:还可以在一般模式下输入“:sp file2”,就会生成另一个窗口,显示的文档也是file2
第三步:可以使用ctrl+w+下上箭头键(jk键)在多个窗口之间切换
12.环境预设
(1)介绍:整体vim的设定值是放置在/etc/vimrc中,不过不建议修改它。但是可以修改~/.vimrc这个文档,如果它不存在,可以新建它,再写入想要的预设值。
(2)常用的预设值:(可以在一般模式下输入:set all来查阅)
set nu -->显示行号(不显示是set nonu)
set hlsearch -->高亮度搜索(不显示是set nohlsearch)
set aotoindent -->自动缩排(不显示是set noaotoindent)
set ruler -->显示右下角的状态栏
set showmode -->显示左下角的状态栏
syntax on -->依据程序相关语法显示不同颜色(不显示是syntax off)
(在~/.vimrc中批注信息使用双引号开头:"批注:这里是显示行号)
13.中文编码的乱码问题
一.中文编码有big5和utf8两种,如果出现乱码,要考虑:
(1)你的linux系统默认支持的语系数据:这与/etc/sysconfig/i18n有关
(2)你的终端界面bash的语系:这与LANG这个参数有关
(3)你的文档原本的编码
(4)开启终端机的软件,比如GNOME下的窗口接口
最重要的是第三四点,只要这两点一致,基本不会有乱码。
二.转换文档的编码
iconv --list -->列出iconv命令支持的语系
iconv -f 原本编码 -t 新编码 filename [-o newfile] (from A to B)
查看文档的编码类型:file filename