Linux基础知识--- 5、VIM文本编辑器

一、打开文件

vim abc #打开abc文件,如果没有abc文件,就默认创建abc文件
vim + abc #打开abc文件,定位到最后一行
vim +5 abc #打开abc文件,定位到最后5行
vim +/xxx abc #打开abc文件,定位到含有xxx的第一行,用n可以切换到下一带xxx的行,N切换到上一个含xxx的行

二、切换到文本输入模式的命令键

i 在光标左侧输入正文
I 在光标所在行的行首输入正文
a 在光标右侧输入正文
A 在光标所在行的行尾输入正文
o 在光标所在行的下一行增添新行,光标位于新行的行首
O 在光标所在行的上一行增添新行,光标位于新行的行首

三、编辑器的退出命令

:wq 保存文件,退出vi编辑器
:w 保存文件,但不退出vi编辑器
:q 退出vi编辑器
:q! 不保存文件,退出vi编辑器
ZZ 保存文件,退出vi编辑器

四、命令模式下vi编辑器的文本修改键

x 删除光标位置指定的字符
dd 删除光标所在的行
u 撤销最近的修改
U 撤销对当前行上做的所有修改
r 替换光标位置上的一个字符
R 替换从光标位置开始的字符,同时改变vi到文本输入模式
.(点) 重复上一次的修改

五、命令模式下vi的光标移动键

h或[ ] 将光标向左移动一格
j或[ ] 将光标向下移动一格
k或[ ] 将光标向上移动一格
l或[ ] 将光标向右移动一格
$ 将光标移到当前行的行尾
w 将光标向右移一个字
b 将光标向左移一个字
e 将光标移到字尾
0(零) 将光标移到当前行的行首
[Return]键 将光标移到下一行的行首
[Spacebar]键 将光标向右移动一位
[Backspace]键 将光标向左移动一位

注意:在文本输入模式下避免使用光标键(箭头键)。因为在某些系统中,光标键被解释为普通的ASCII 字符。如果在文本输入模式下使用光标键,那么对应的ASCII字符将被插入文件中。

六、vim编辑器的剪切和粘贴键

d 删除指定位置的文本,并存到临时的缓冲区中。可以使用put操作符(p或P键)访问这个缓冲区
y 将指定位置的文本复制到临时缓冲区。可以使用put操作符访问这个缓冲区
P 将指定缓冲区的内容放到当前光标的位置之上
p 将指定缓冲区的内容放到当前光标的位置之下
翻页键 翻页键用来大块滚动用户的文件,在vi的命令模式下可用。表6列出了vi编辑器的翻页键及其功能。

七、vim编辑器的翻页键

[Ctrl-d] 将光标向下移到文件尾,通常每次移动12行
[Ctrl-u] 将光标向上移到文件头,通常每次移动12行
[Ctrl-f] 将光标向下移到文件尾,通常每次移动24行
[Ctrl-b] 将光标向上移到文件头,通常每次移动24行

三种常见的模式:Normail Mode(命令模式),Insert Mode(输入模式)和Visual Mode(视图模式)。
命令模式和输入模式的切换有Append,Insert,Replace,Subsitute 记作AIRS,这种记忆方法特别方便,英文单词的意思是空气,vim在命令模式和输入模式的切换就像空气一样,无影无形。

八、vim其他命令

打开文件、保存、关闭文件:

    vi filename       //打开filename文件
    :w              //保存文件
    :w vpser.net  //保存至vpser.net文件
    :q             //退出编辑器,如果文件已修改请使用下面的命令
    :q!           //退出编辑器,且不保存
    :wq              //退出编辑器,且保存文件

插入文本或行:

    a      //在当前光标位置的右边添加文本
    i       //在当前光标位置的左边添加文本
    A     //在当前行的末尾位置添加文本
    I      //在当前行的开始处添加文本(非空字符的行首)
    O     //在当前行的上面新建一行
    o     //在当前行的下面新建一行
    R    //替换(覆盖)当前光标位置及后面的若干文本
    J    //合并光标所在行及下一行为一行(依然在命令模式)

移动光标:

    使用上下左右方向键
    命令模式下:h   向左、j   向下 、k   向上、l  向右。
    空格键 向右、Backspace  向左、Enter  移动到下一行首、-  移动到上一行首。

删除:

    x         //删除当前字符
    nx        //删除从光标开始的n个字符
    dd      //删除当前行
    ndd   //向下删除当前行在内的n行
    u       //撤销上一步操作
    U      //撤销对当前行的所有操作

搜索:

    /vpser     //向光标下搜索vpser字符串
    ?vpser    //向光标上搜索vpser字符串
    n           //向下搜索前一个搜素动作
    N           //向上搜索前一个搜索动作

跳转:

    n+        //向下跳n行
    n-         //向上跳n行
    nG        //跳到行号为n的行
    G           //跳至文件的底部

设置行号:

    :set  nu     //显示行号
    :set nonu    //取消显示行号

复制:

    yy    //将当前行复制到缓存区,也可以用 "ayy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
    nyy   //将当前行向下n行复制到缓冲区,也可以用 "anyy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
    yw    //复制从光标开始到词尾的字符。
    nyw   //复制从光标开始的n个单词。
    y^      //复制从光标到行首的内容。 
    y$      //复制从光标到行尾的内容。
    p        //粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用"ap 进行粘贴。
    P        //粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用"aP 进行粘贴。

替换:

    :s/old/new      //用new替换行中首次出现的old
    :s/old/new/g         //用new替换行中所有的old
    :n,m s/old/new/g     //用new替换从n到m行里所有的old
    :%s/old/new/g      //用new替换当前文件里所有的old

编辑其他资源:

    :e otherfilename    //编辑文件名为otherfilename的文件。

修改文件格式:

    :set fileformat=unix   //将文件修改为unix格式,如win下面的文本文件在linux下会出现^M。

九、其它

  1. vim的配置文件

    ~/.vimrc        用户的默认配置文件
    ~/.vim/plugin/   用户的默认脚本文件的存放目录
    ~/.vim/ftplugin/ 用户的默认文件类型相关脚本文件的存放目录
    
  2. vim提供的编程支持
      文本信息(行号、文件名等)
      代码缩进
      语法高亮
      快速定位
      标记位置
      全文搜索
      补全
      多文件编辑
      多窗口编辑
      函数列表
      文件列表
      函数跳转
      语法错误
      字符集的编码
      二进制查看
      等等…

  3. 快速定位

    gd(正常模式下使用命令) 跳转到局部变量定义处。
    gD(正常模式下使用命令) 跳转到全局标量定义处。
    *(正常模式下使用命令) 搜索并跳到下一个光标所在的单词。
    g*(正常模式下使用命令) 功能接近*,但是查找的目标不带\<和\>单词分界符号。
    #(正常模式下使用命令) 搜索并跳到上一个光标所在的单词。
    g#(正常模式下使用命令) 功能接近#,但是查找的目标不带\<和\>单词分界符号。
    
  4. 用/和?的区别:

    /后跟查找的字符串。vim会显示文本中第一个出现的字符串。
    ?后跟查找的字符串。vim会显示文本中最后一个出现的字符串。
    
    注意事项:
    不管用/还是?查找到第一个字符串后,按回车,vim会高亮所有的匹配文
    系统新氧ubuntu下默认的是incsearch模式,就是输完命令后,会自动显示第一个(或最后一个)匹配。
    如果输入:set noincsearch 会转到普通模式,不会自动显示第一个匹配,回车后显示所有匹配。
    高亮所有的匹配后,按n键转到下一个匹配,按N键转到上一个匹配。
    
  5. 标记位置

    m{a-zA-Z0-9} (正常模式下使用命令) 在当前位置制作一个标记,标记名字可以使用a-z或者A-Z之间的任意字符,例如输入ma,就是将当前位置标记为a标记。注意a-z为单文件标记,不可跨文件使用,而A-Z0-9为全局标记,可以跨文件使用。
    ‘{a-zA-Z0-9} (正常模式下使用命令) 跳转到本文件的标记上。
    :marks [{a-zA-z0-9}] (正常模式下使用命令) 查看指定标记的内容,不写标记号则查看所有。
    :delm {a-zA-z0-9} (正常模式下使用命令) 删除一个标记。
    
  6. 全文搜索

    :vimgrep(正常模式下使用命令) 全文搜索,功能同grep命令,但是支持在vim进行多文件跳转定位。
    使用方法:vimgrep 正则表达式 文件。文件支持通配符,例如*.c代表所有的.c文件。如果希望递归搜索,可以使用**/*,表示搜索所有的文件。
    :cl 列举结果
    :cc(正常模式下使用命令) 当前结果
    :cn(正常模式下使用命令) 下一个结果
    :cp(正常模式下使用命令) 上一个结果
    :cw(正常模式下使用命令) 重新打开搜索结果窗口
    
  7. 多文件编辑

    vim f1 f2 …… fn(在shell下使用命令) 打开多个文件。
    :e 文件名(正常模式下使用命令) 在vim中打开新文件。
    :ls(正常模式下使用命令) 所有打开文件列表。
    :bn(正常模式下使用命令) 到下一个文件。
    :bp(正常模式下使用命令) 到上一个文件。
    :b# 或 ctrl-6(正常模式下使用命令) 到最近的前一个文件。
    set  autowriteall(写入配置文件.vimrc中) 如果讨厌每次打开新文件,vim喋喋不休的要求你保存,那么可以设置自动保存。
    
  8. 多窗口编辑

    :sp  文件名(正常模式下使用命令) 横向拆分窗口(多行窗口)。
    :vsp 文件名(正常模式下使用命令) 纵向拆分窗口(多列窗口)。
    ctrl-w h(正常模式下使用命令) 将光标移动到左一个窗口。
    ctrl-w j(正常模式下使用命令) 将光标移动到下一个窗口。
    ctrl-w k(正常模式下使用命令) 将光标移动到上一个窗口。
    ctrl-w l(正常模式下使用命令) 将光标移动到右一个窗口。
    ctrl-w +(正常模式下使用命令) 当前窗口尺寸变大。
    ctrl-w -(正常模式下使用命令) 当前窗口尺寸变小。
    ctrl-w o(正常模式下使用命令) 只显示当前窗口。
    
  9. 函数列表

    taglist.vim(插件) 列表插件。
    let Tlist_Use_Right_Window = 1(写入配置文件.vimrc中) 如果希望列表在右侧显示,则加入这个配置,默认是左侧。
    :Tlist(正常模式下使用命令) 显示函数列表。
    d(在taglist窗口下使用) 从列表中删除文件。
    +(在taglist窗口下使用) 展开文件。
    -(在taglist窗口下使用) 折叠文件。
    =(在taglist窗口下使用) 折叠所有文件。
    x(在taglist窗口下使用) 显示或隐藏正常窗口。
    
  10. 文件列表

    NERD_tree.vim(插件) 横向拆分窗口(多行窗口)。
    let NERDTreeWinPos = 'right'(写入配置文件.vimrc中) 如果希望文件树在右侧显示,则加入这个配置,默认是左侧。
    :NERDTree(正常模式下使用命令) 显示文件列表。
    
  11. 函数跳转

    ctags(软件,需要另外安装) 生成多种语言tag文件的软件。
    Ctags –R *.c(在shell下使用命令) 生成当前路径所有.c文件的tag,-R代表递归。
    :ta 标记 或 [g] ctrl-] 列举标签(多个标签)或者跳转到标签(单个标签)。
    ctrl-t 返回上一级。
    :tags 列出标签栈。
    
  12. 语法错误

    :make(正常模式下使用命令) 执行外部make命令,并且显示所有的编译警告和错误,并且可以在vim中定位。
    :cl 列举结果
    :cc(正常模式下使用命令) 当前结果
    :cn(正常模式下使用命令) 下一个结果
    :cp(正常模式下使用命令) 上一个结果
    :cw(正常模式下使用命令) 重新打开搜索结果窗口
    
  13. 补充

    ctrl-p(插入模式下使用命令) 跳出补全菜单。
    ctrl-n(在跳出补全菜单后) 下一个结果。
    ctrl-p(在跳出补全菜单后) 上一个结果。
    ctrl-y(在跳出补全菜单后) 选择当前结果。
    ctrl-x ctrl-f(插入模式下使用命令) 文件名补全。
    ctrl-x ctrl-i(插入模式下使用命令) 包含的头文件。
    ctrl-x ctrl-](插入模式下使用命令) ctags(将在下文中介绍)符号补全。
    ctrl-x ctrl-o(插入模式下使用命令) omni补全,需要设置omnifunc变量。
    
发布了40 篇原创文章 · 获赞 6 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章