一、vi的使用
1. vi的三种模式
-
一般指令模式(command mode)
-
编辑模式(insert mode)
-
命令行命令模式(command-line mode)
2. 一般指令模式:光标移动
h或左方向键:光标向左移动一个字符; j或下方向键:光标向下移动一个字符; k或上方向键:光标向上移动一个字符; l或右方向键:光标向右移动一个字符; [number][hjkl]:向某方向移动number列; [Ctrl]+[f]:屏幕向下移动一页;[Page Down] [Ctrl]+[b]:屏幕向上移动一页;[page Up] [Ctrl]+[d]:屏幕向下移动半页; [Ctrl]+[u]:屏幕向上移动半页; +:光标移动到非空白字符的下一列; -:光标移动到非空白字符的上一列; n<space>:光标向右移动n个字符; 0或[Home]:移动到这一列的最前面字符处; $或[End]:移动到这一列的最后面字符处; H:光标移动到这个屏幕的最上方那一列的第一个字符; M:光标移动到这个屏幕的中央那一列的第一个字符; L:光标移动到这个屏幕的最下方那一列的第一个字符; G:移动到这个文件的最后一列(常用); nG:n为数,移动到这个文件的第n列; gg:移动到这个文件的第一列,相当于1G; n<Enter>:n为数字,光标向下移动n列。
3. 一般指令模式:搜寻与取代
/word:向光标之下寻找一个名称为word的字串; ?word:向光标之上寻找一个字串名称为word的字串; n:重复前一个搜寻的动作; N:与n刚好相反,为“反向”进行前一个搜寻动作; :n1,n2s/word1/word2/g:n1与n2为数字,在第n1与n2列之间寻找 word1这个字串,并将该字串取代为word2; :1,$s/word1/word2/g:从第一列到最后一列寻找word1字串,并将该字串取代为word2; :1,$s/word1/word2/gc:从第一列到最后一列寻找word1字串,并将该字串取代为word2,且在取代前显示提示字符给使用者确(confirm)是否需要取代。
4. 一般指令模式:删除、复制与贴上
x, X:在一列字当中,x为向后删除一个字符 (相当于 [del] ),X为向前删除一个字符(相当于 [backspace] ); nx:n为数字,连续向后删除n个字符; dd:删除光标所在的那一整列; ndd:n为数字。删除光标所在的向下n列; d1G:删除光标所在到第一列的所有数据; dG:删除光标所在到最后一列的所有数据; d$:删除光标所在处,到该列的最后一个字符; d0:那个是数字的0,删除光标所在处,到该列的最前面一个字符; yy:复制光标所在的那一列; nyy:n为数字。复制光标所在的向下n列; y1G:复制光标所在列到第一列的所有数据; yG:复制光标所在列到最后一列的所有数据; y0:复制光标所在的那个字符到该列行首的所有数据; y$:复制光标所在的那个字符到该列行尾的所有数据; p, P:p为将已复制的数据在光标下一列贴上,P 则为贴在光标上一列; J:将光标所在列与下一列的数据结合成同一列; c:重复删除多个数据,例如向下删除 10 列,[10cj]; u:复原前一个动作; [Ctrl]+r:重做上一个动作; .:这就是小数点,意思是重复前一个动作的意思。
5. 进入插入或取代的编辑模式
i,I:进入插入模式(Insert mode),i为“从目前光标所在处插入”,I为“在目前所在列的第一个非空白字符处开始插入”; a,A:进入插入模式(Insert mode),a为“从目前光标所在的下一个字符处开始插入”,A为“从光标所在列的最后一个字符处开始插入”; o,O:进入插入模式(Insert mode),o为“在目前光标所在的下一列处插入新的一列”;O为在目前光标所在处的上一列插入新的一列; r,R:进入取代模式(Replace mode),r只会取代光标所在的那一个字符一次;R会一直取代光标所在的文字,直到按下ESC为止; [Esc] 退出编辑模式,回到一般指令模式中;
6. 命令行界面的储存、离开等指令
:w:将编辑的数据写入硬盘文件中; :w!:若文件属性为“只读”时,强制写入该文件。不过,到底能不能写入,还是跟你对该文件的文件权限有关; :q:离开vi; :q!:若曾修改过文件,又不想储存,使用!为强制离开不储存盘案; :wq:储存后离开,若为:wq!则为强制储存后离开; ZZ:若文件没有更动,则不储存离开,若文件已经被更动过,则储存后离开; :w[filename]:将编辑的数据储存成另一个文件; :r[filename]:在编辑的数据中,读入另一个文件的数据; :n1,n2 w [filename]:将n1到n2的内容储存成filename这个文件; :!command:暂时离开vi到命令行界面下执行 command 的显示结果;
7. vim环境的变更
:set nu:显示行号,设置之后,会在每一列的字首显示该列的行号; :set nonu:与set nu相反,为取消行号;
二、vim的额外功能
1. 区块选择
v:字符选择,会将光标经过的地方反白选择; V:列选择,会将光标经过的列反白选择; [Ctrl]+v:区块选择,可以用长方形的方式选择数据; y:将反白的地方复制起来; d:将反白的地方删除掉; p:将刚刚复制的区块,在光标所在处贴上;
2. 多文件编辑
:n:编辑下一个文件; :N:编辑上一个文件; :files:列出目前这个vim的打开的所有文件;
3. 多窗口功能
:sp [filename]:打开一个新窗口,如果有加filename,表示在新窗口打开一个新文件,否则表示两个窗口为同一个文件内容(同步显示); [ctrl]+w+j [ctrl]+w+↓:先按下 [ctrl] 不放,再按下w后放开所有的按键,然后再按下j(或向下方向键),则光标可移动到下方的窗口; [ctrl]+w+k [ctrl]+w+↑:同上,不过光标移动到上面的窗口; [ctrl]+w+q:其实就是:q结束离开,举例来说,如果我想要结束下方的窗口,那么利用[ctrl]+w+↓移动到下方窗口后,按下:q即可离开,也可以按下 [ctrl]+w+q;
4. 挑字补全功能
[ctrl]+x -> [ctrl]+n:通过目前正在编辑的这个“文件的内容文字”作为关键字,予以补齐; [ctrl]+x -> [ctrl]+f:以当前目录内的“文件名”作为关键字,予以补齐; [ctrl]+x -> [ctrl]+o:以扩展名作为语法补充,以 vim 内置的关键字,予以补齐;
5. 环境设置与记录
:set nu :set nonu:就是设置与取消行号; :set hlsearch :set nohlsearch:hlsearch就是high light search(高亮度搜寻)。这个就是设置是否将搜寻的字串反白的设置值。默认值是hlsearch; :set autoindent :set noautoindent:是否自动缩排。autoindent就是自动缩排。 :set backup:是否自动储存备份文件。一般是nobackup的,如果设置 backup的话,那么当你更动任何一个文件时,则原始文件会被另存成一个文件名为filename~的文件。 :set ruler:显示或不显示右下角的一些状态列说明; :set showmode:是否要显示--INSERT--之类的字眼在左下角的状态列; :set backspace=(012):当backspace为2时,就是可以删除任意值;0 或1时,仅可删除刚刚输入的字符,而无法删除原本就已经存在的文字了; :set all:显示目前所有的环境参数设置值; :set:显示与系统默认值不同的设置参数; :syntax on :syntax off:是否依据程序相关语法显示不同颜色; :set bg=dark :set bg=light:可用以显示不同的颜色色调,默认是“light”;
三、vim注意事项
1. 中文编码问题
-
Linux系统默认支持的语系数据(/etc/locate.conf);
-
终端接口(bash)的语系(LANG、LC_ALL);
-
文件原本的编码;
-
打开终端机的软件;
2. DOS与Linux断行字符
3. 语系编码转换
iconv --list iconv -f 原本编码 -t 新编码 filename [-o newfile]
--list:列出iconv支持的语系数据; -f:from,亦即来源之意,后接原本的编码格式; -t:to,亦即后来的新编码要是什么格式; -o file:如果要保留原本的文件,那么使用-o新文件名,可以创建新编码文件;