首页 > 代码库 > linux--vim

linux--vim

下面是最近学习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

 

linux--vim