2025年Linux 中 VIM 的使用

Linux 中 VIM 的使用Vim 官网 http www vim org VIM 实用技巧 https wenku baidu com view 21c5f387d4d8 html vim 的一些小技巧 https www douban com group topic 1815089 vim 简单实用的技巧总结 http

大家好,我是讯享网,很高兴认识大家。

Vim 官网:http://www.vim.org/

VIM 实用技巧:https://wenku.baidu.com/view/21c5f387d4d8d15abe234ecb.html
vim 的一些小技巧:https://www.douban.com/group/topic/
vim 简单实用的技巧总结:http://www.tuicool.com/articles/rq6ryqi
《Vim 实用技巧》笔记:http://darksun.blog.51cto.com//

VIM 使用技巧 PDF 下载:http://download.csdn.net/download/freeking101/

Kali自带vim配置:https://blog.csdn.net/u0/article/details/

史上最全 Vim 快捷键键位图(入门到进阶):https://www.linuxidc.com/Linux/2016-06/132019.htm

如果出现vim鼠标右键不能复制粘贴并且进入visual,可能是终端配置问题,把 Xterm 模式改为 linux 模式。或者设置 set mouse-=a。  set mouse=a【这个是用来开启鼠标功能的,a表示所有模式】

gg=G    (自动格式化全部代码)
mG=nG(自动格式化第m到第n行)
==         (格式化当前行)

Vim 键位图

vim键位图(如果网页图片看不清,可以 “右键->在新标签页中打开图片” 查看)

英文版(基础版)


讯享网

简体中文版(基础版)

程序员定制版

https://blog.csdn.net/zhlh_xt/article/details/

个性化配置

vim 是什么?

所有的Linux/UNIX都会默认安装Vi,现在主流的linux都会给默认安装vim。vim是Vi IMproved,是编辑器Vi的一个加强版。Vim/Vi是一个功能强大的全屏幕文本编辑器, 是Linux/UNIX上最常用的文本编辑器, 它的作用是建立、编辑、显示文本文件;Vi几乎支持所有的语言。Vim/Vi 没有菜单,只有命令。 如果你是一名职业的SE,那么一定在寻找一款出色的能够自由定制、满足灵活编辑功能的编辑器。那么答案,就是vim或者Emacs。本文介绍vim编辑器。至于另一款强大的编辑器Emacs,以后有时间在整理学习。。。。

配置文件在哪?

Windows系统的配置文件是vim安装目录下的vimrc文件。
Linux系统,RHEL和CentOS的配置文件是/etc/vimrc,Debian和Ubuntu的配置文件是/usr/share/vim/vimrc。
Mac OS X的配置文件是/usr/share/vim/vimrc。

vimRC 中的 RC 是什么意思?

一般在运行某个软件、环境或工具之初,要初始执行的一些命令,称为 Run Commands,即 RC。根据 Wikipedia.org 的记载,RC 缩写的用法源自 MIT 的相容分时操作系统(Compatible Time-Sharing System,CTSS)[参考1]。所以以后如果你看到了SystemRC 或者 ScreenRC,也就知其缘由了。

三种基本模式

在《大家来学vim》中提到vim有6+5种模式,除了细分程度不同外,实际上常用的只有3种模式:Normal Mode、Insert Mode和Command-line Mode。从Normal Mode进入Insert Mode,可以按i、I、a、A、o、O、r、R即可。其中i和I表示插入(Insert),r和R表示替换(replace)。从Insert Mode进入Normal Mode,只需要按ESC键即可。从Normal Mode进入Command-line Mode,可以按“:”、“/”、“?”。其中“:”表示输入vim命令,“/”表示后面输入要向下搜索的字符串,“?”表示后面输入要向上搜索字符串。从Command-line Mode进入Normal Mode,只需要按ESC键即可了。可以把Normal Mode理解为常态,进入其他任何一种模式,需要某种特殊方式,而从其他特殊模式回到Normal Mode,就按ESC键即可。

Vim/Vi工作模式

vim中那些最最常用的配置

超级强大的vim配置:http://blog.csdn.net/freeking101/article/details/

(1)颜色设置

syntax on "开启代码高亮 syntax off "关闭代码高亮 syntax enable "开启代码高亮

讯享网

(2)搜索设置

讯享网set hlsearch " 开启搜索高亮 set nohlsearch " 关闭搜索高亮 或者 命令模式下输入:nohlsearch " nohlsearch 是 no highlight search 缩写, 可以简写 noh 或者set noh set incsearch " 输入搜索字符串的同时进行搜索 set ignorecase " 搜索时忽略大小写

可以使用如下方式来实现快速查找:

  1. 最快的方式是让光标停留在想要查找的单词的任意一个字母上面, 然后输入Shift + * ,即可快速选中该单词,并且可以通过 n 或 N 进行上一个或下一个的匹配。
  2. 让光标停留在单词的第一个字母上, 然后输入yw拷贝该单词, 然后输入 / (Ctrl + R) 0 (即 /”0),回车, 就查找到了第一个匹配的单词, 并且可以通过 n 或 N 进行上一个或下一个的匹配。
    解释一下:
    Ctrl + r 是指使用寄存器 , 你会发现先输入/ , 然后输入 Ctrl + r , 会立刻变为 “ , 即寄存器的前缀, 然后 ”0 就可以理解了吧? 合起来就是 /“0, 就是查找刚才复制的那个单词, 不懂的请查看上一个帖子:
    vim的复制粘贴(系统剪切板):http://blog.csdn.net/hk/article/details/
    vim之寄存器的使用和配置:http://blog.csdn.net/ballack_linux/article/details/
  3. 还有一种方式, 和第二种方式差不多,不过是将单词拷贝到系统剪贴板, 然后再从系统剪贴板拿出来。 即选中需要查找的单词, 然后输入 “+y, 然后输入/(Shfit + Ctrl + v), 就查找到了第一个匹配的单词, 并且可以通过 n 或 N 进行上一个或下一个的匹配。

(3)用户界面

set showmode " 开启模式显示 set ruler " 开启光标位置提示 set number " 显示行号 set nonu " 不显示行号 set cursorline " 强调光标所在行 set cmdheight=1 " 命令部分高度为 1

(4)编辑辅助配置

讯享网set autoindent " 自动缩进 set noautoindent " 不自动缩进 set smartindent " 智能缩进 set autoread " 当文件在外部被改变时,vim自动更新载入 set showmatch " 显示匹配的括号

(5)set 命令 和 set 的一些选项

set命令 :set ic 搜寻时忽略大小写 (ic:ignore case) :set noic 搜寻时不忽略大小写 :set number 显示行号 :set nonumber 不显示行号 set 的一些选项 all:列出所有选项设置情况 term:设置终端类型 ignorance:在搜索中忽略大小写 list:显示制表位(Ctrl+I)和行尾标志($) number:显示行号 report:显示由面向行的命令修改过的数目 terse:显示简短的警告信息 warn:在转到别的文件时若没保存当前文件则显示NO write信息 nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始 mesg:允许vi显示其他用户用write写到自己终端上的信息

参考:

Vim 使用

Vim同时打开并切换多个文件

  • 1、用 vim 打开一个文件,例如:original.trace
  • 2、在普通模式下,输入:":sp"(不含引号)横向切分一个窗口,或者":vsp"纵向切分一个窗口,敲入命令后,你将看到两个窗口打开的是同一个文件
  • 3、在普通模式下,输入:":e new.trace",在其中一个窗口里打开另一个文件
  • 4、在 普通模式下 ctrl+w,再按一下 w,可以在两个窗口之间切换

Vim跨文件复制

现在把 a.txt 的三行复制到 b.txt
1、用 vim 打开 a.txt
        # vim a.txt
        Esc 进入指令模式(默认刚打开就是这个模式)
        输入"a3yy
        解释:引号要结合shift输入,a 代表剪贴板 a(26个英文字母都可以),3yy当然代表从当前行复制3行了
        退出a.txt
        :q
2、打开 b.txt
        光标移动到你想要复制的位置
        进入指令模式,输入"ap
        解释:引号要结合shift输入,a 代表使用剪贴板 a,p 当然代表粘贴了


Vim 复制到系统剪贴板

  • 1.首先查看 vim --version | grep clipboard 中 clipboard 选项是否开启
  • 2.ubuntu 中通过下载 vim-gnome 可以开启系统剪贴板 sudo apt-get install vim-gnome
  • 3.复制粘贴通过 "+y  和 "+p 实现 (在一般模式下按 v 进入visual 模式 G 全选后复制)

怎样在 vim 的命令行中拷贝,粘贴?

在 vim 的普通模式下,输入':'进入命令行模式,我们可以在屏幕下方输入我们想让vim执行的命令。有时候,我们需要在命令行中执行拷贝粘贴,

可是怎么在命令行中实现粘贴呢?别急,介绍一个好东西:命令行窗口。在正常模式下,输入'q:',就打开了命令行窗口。命令行窗口中都是我们输入过的命令,在这个窗口中我们可以像编辑正文一样编辑新的命令,或修改旧的命令。因为像编辑普通缓冲区一样,自然可以拷贝粘贴了。编辑完之后,在想要执行的命令上按回车,就ok了。命令执行后,命令行窗口也自动关闭了。

常用快捷键

讯享网进入vi的命令
    vi filename :          打开或新建文件,并将光标置于第一行首
    vi +n filename :      打开文件,并将光标置于第n行首
    vi + filename :       打开文件,并将光标置于最后一行首
    vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
    vi -r filename :      在上次正用vi编辑时发生系统崩溃,恢复filename
    vi filename....filename :打开多个文件,依次进行编辑


可视模式(选择文本):------------  vim 中选中指定字符,进行复制/剪切/粘贴
    进入vim中visual模式,visual模式进入,可以有三种方式:   
    (1)在普通模式(normal)下,直接按键 v  就可以进入默认visual模式
         可以使用 v+j/k/h/l 进行文本选择  

    v(小写字母v): 按字符移动,选中文本
    V(大写字母V): 选择一行,按行移动,选中文本可视模式,
                 可以配合 d, y, >>, << 实现对文本块的删除,复制,左右移动
    ctrl+v      : 按下^v后即可进行矩形的选择了(ctrl + 小写字母v) 
        在块模式下,可以进行多列的同时修改,修改方法是:
        首先进入块模式 Ctrl+ v,使用按键j/k/h/l进行选中多列。
        按键Shift + i 进行 块模式下的插入,输入字符之后,按键ESC,完成多行的插入。

    对于选中的文本进行如下按键:
    d:剪切操作
    y:复制操作
    p:粘贴操作
    ^:选中当前行,光标位置到行首(或者使用键盘的HOME键)
    $:选中当前行,光标位置到行尾(或者使用键盘的END键)

    :join    合并多行
    J        合并两行


Vim 的分屏操作(:split 文件名   同时在一个页面显示多个文件的内容,类似多窗口,用切换当前窗口。 
               多窗口是split,像用 e 打开多个文件是将文件放在缓冲区中)
    sp:  上下分屏,后可跟文件名。    :sp 001.txt
    vsp: 左右分屏,后可跟文件名      :vsp 001.txt
    Ctr+w+w:在多个窗口切换
    wqall:保存退出关闭所有。   
    qall:退出所有
 
    启动分屏:
            1.使用 大写O 参数进行垂直分屏  vim -On file1 file2 ...
            2.使用 小写o 参数进行水平分屏  vim -on file1 file2 ...
            注: n 是数字,表示分屏的数量,n 要大于等于文件个数
    关闭分屏
            1.关闭当前窗口 ctrl+w c (同时按下ctrl和w,松开按下c)      
              关闭分割窗口可以用:close,剩下只有一个窗口的话就不能关了。
            2.关闭当前窗口,如果只剩最后一个,则退出vim。ctrl+w q
    编辑中分屏
            1.上下分割当前打开的文件              ctrl+w s
            2.上下分割,并打开一个新的文件        :sp filename
            3.左右分割当前打开的文件              ctrl+w v
            4.左右分割,并打开一个新的文件        :vsp filename
    分屏编辑中光标的移动
            vi 中的光标键是 h,j,k,l,要在各个屏之间切换,只需要先按一下ctrl+w
            1.把光标移动到上边的屏         ctrl+w k
            2.把光标移动到下边的屏         ctrl+w j
            3.把光标移动到右边的屏         ctrl+w l
            4.把光标移动到左边的屏         ctrl+w h
            5.把光标移动到下一个的屏       ctrl+w w
    移动分屏
            1. 当前分屏向上移动         ctrl+w K
            2. 当前分屏向下移动         ctrl+w J
            3. 当前分屏向右移动         ctrl+w L
            4. 当前分屏向左移动         ctrl+w H
    屏幕尺寸
            1.增加高度                 ctrl+w +
            2.减少高度                 ctrl+w -
            3.让所有屏的高度一致       ctrl+w =
            4.左加宽度                 ctrl+w >
            5.右加宽度                 ctrl+w <
            6.右增加n宽 (如:n=30)     ctrl+w n <

Normal Mode -> Insert Mode
    (i=insert、a=append、r=replace、o=open)。
    i    小写字母i,在  光标前  插入
    a    小写字母a,在  光标后  附加文本
    I    大写字母I,在  本行行首  插入文本。在光标所在行的第一个非空格处插入
    A    大写字母A,在  本行行尾  附加文本
    o    小写字母o,在光标所在行的  下一行  处插入新行
    O    大写字母O,在光标所在行的  上一行  处插入新行
    r    小写字母r,替换光标所在处的字符一次
    R    大写字母R,持续替换光标所在处的字符,直到按下ESC

Normal Mode -> Command-line Mode
    :w                     保存文件
    :w <filename>          另存为名为filename文件
    :w! filename           强制保存到指定文件,文件存在则覆盖
    :wq! filename          强制保存到指定文件,文件存在则覆盖,并退出
    :n1,n2 w <filename>    将n1行到n2行的数据另存为名为filename文件
    :w!                    强制保存文件(前提是用户有修改文件访问权限的权限)
    :q                     退出缓冲区,即退出vi,如果文件修改但没有保存,会提示无法退出
    :q!                    不保存文件,直接退出 。
    :wq!                   保存并强制退出
    :wq                    保存退出。
    :x                     如果文件有更改,则保存后退出,否则直接退出。
    ZZ                     (Normal 模式下 ZZ)同 :wq
    :wq!                   强制保存文件并退出缓冲区(前提是用户有修改文件访问权限的权限)

    :e filename         打开文件filename进行编辑
    :x                  保存当前文件并退出
    :!command           执行shell命令command(也就是在VIM里面执行shell命令)
    :n1,n2 w!command    将文件中 n1 行至 n2 行的内容作为command 的输入并执行之,
                        若不指定n1,n2,则表示将整个文件内容作为command的输入
    :r!command          将命令command的输出结果放到当前行
    :r 文件名            在光标所在处插入一个文件的内容。(read)
    :r /etc/passwd       在打开的文件中,在光标所在处读入/etc/passwd内容
    :3r /etc/passwd      在打开文件的第3行开始读入 /etc/passwd的所有内容。
    :35 r 文件名         将文件插入至 35 行之后。

    打开一个文件编辑后才知道登录的用户对该文件没有写的权限,不能存盘,
    需要将所做修改存入临时文件。
    vi file
    :w /tmp/1 

    把第20~59行之间的内容存盘成文件/tmp/1,我们可以键入如下命令。
    vi file
    :20,59w /tmp/1

Insert Mode -> Normal Mode 和 Command-line -> Normal Mode
    按下ESC键


常用光标移动按键( 在 vi 中, 移动光标 和 编辑 是 两件事, 
                 正因为区分开来, 所以可以很方便的进行光标定位和编辑.)

    Ctrl+o     回到光标的上一位置

    光标字符操作
        h、j、k、l:左、下、上、右 的移动光标命令。虽然您可以在Linux中使用键盘右边的4个光标键,
                   但是记住这4个命令还是非常有用的。这4个键正是右手在键盘上放置的基本位置。
        $          光标移动到行尾(End),注意要按Shift键
        0          (注意是数字零)光标移至当前行首(Home)
        ^          光标移动到行首第一个非空白字符(Home),注意要按Shift键
        space      光标右移一个字符
        Backspace  光标左移一个字符
        Enter      光标下移一行

        ''     此命令相当有用, 它移动光标到上一个标记处, 比如用 gd, * 等查
               找到某个单词后, 再输入此命令则回到上次停留的位置.
        '.     此命令相当好使, 它移动光标到上一次的修改行.
        `.     此命令相当强大, 它移动光标到上一次的修改点.
    
    
    光标词操作
        w或W       光标右移一个字至字首
        b或B       光标左移一个字至字首
        e或E       光标右移一个字至字尾


    光标句操作、段操作、行操作
        )          光标移动到后一句的句首
        (          光标移动到前一句的句首
        }          光标移动到下一段的段首
        {          光标移动到上一段的段首
        nG         定位到 第 n 行首  (G 是goto 的意思)
        :n         定位到 第 n 行
        gg         移动到文件第一行行首
        G          移动到文件最后一行。
        Ctrl+G     光标所在位置的行数和列数报告
        数字n      光标 向下 移动 n 行。例如:正常模式下,按下数字5,然后回车,代表向下移动5行。

        n+         光标下移n行,例如10+。  
        n-         光标上移n行,例如5-。 
        n$         光标移至第n行尾
    
    
    光标页操作。屏幕翻滚类命令
        Ctrl+f     向下翻页(Pagedown)
        Ctrl+b     向上翻页(Pageup)
        Ctrl+d     向下翻半页
        Ctrl+u     向上翻半页
        nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。
        H          光标移至屏幕顶行(Head)
        M          光标移至屏幕中间行(Middle)
        L          光标移至屏幕最后行(Last)



常用编辑快捷键
    :n1,n2 co n3      将n1行到n2行之间的内容“拷贝”到第n3行下
    :.,5 copy 10      把从当前行开始直至后序第5行的内容“复制”到第10行之后
    :6,$ co 2         把从第6行开始至文件尾的内容“复制”到第2行之后
    :n1,n2 m n3       将n1行到n2行之间的内容“移至”到第n3行下
    :1,5 move 12      把第1行到第5行的内同“移动”到第12行之后
    :n1,n2 d          将n1行到n2行之间的内容删除
    :1,5 delete       删除第1行到第5行内容
    
    
    [n]s        从当前光标位置处开始,以输入的文本替代指定数目的字符。加上n代表替换n个
    S           删除光标所在行。即清空光标所在行。按esc 键结束
    C           替换光标位置开始直至行尾的所有数据内容。清空光标所在位置到行尾内容。
    ncw或nCW    修改指定数目的字
    nCC         修改指定数目的行
    [n]cc       删除整行,但是删除的行不会消失,而是变为空,然后可以修改整行的内容。
    cw:删除一个单词并进入插入模式,      cc:删除一行并进入插入模式。
    
    
    Ctrl+u      删除输入方式下所输入的文本
    J           把下一行合并到当前行尾 
    v(view)->选中内容->d:先在命令模式下按v,再使用方向键选择内容,然后按d删除选中的内容
    
    "?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
    "?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
    "?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
    "?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字
    ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存

    同时编辑2个文件,拷贝一个文件中的文本并粘贴到另一个文件中。
    vi file1 file2
    yy 在 文件1 的光标处拷贝所在行
    :n 切换到下一个文件 (n=next)
    p 在 文件2 的光标所在处粘贴所拷贝的行
    :N 切换回上一个文件


删除操作(delete)
    dd     删除光标所在行。 ( 剪切dd --- 粘贴p ),yw 复制单词,yy 复制行
    ndd    删除从光标所在行开始,向下的n行
    d1G    删除从光标所在行开始,到第一行的所有行
    dG     删除光标所在开始到文件尾的所有字符
    d$     删除从光标所在位置,到行尾的所有字符
    d0     删除从光标所在位置,到行首的所有字符d0 删除到某一行的开始位置 
    d^     删除到某一行的第一个字符位置(不包括空格或TAB字符) 
    D      以行为单位,删除包括光标在内及其后面的所有字符。即 删除 至 行尾   
    dw     删除到某个单词的结尾位置 
    d3w    删除到第三个单词的结尾位置     或者  ndw 或 ndW  删除光标处开始及其后的 n-1 个字
    db     删除该行光标前字符(delete begin)。     
    de     删除自光标开始后面的字符(delete end)
        
    cw、dw    改变(置换)/删除光标所在处的单词(或者字) (c=change、d=delete)。
    nx        向后删除n个字符。nX 是向前删除n个字符。3x:删除光标开始3个字符
    x 或 X    删除一个字符。x(相当于delete)删除光标后的,而X(相当于backspace)删除光标前的
    
    dW    删除到某个以空格作为分隔符的单词的结尾位置 
    dB    删除到某个以空格作为分隔符的单词的开始位置 
    d7B   删除到前面7个以空格作为分隔符的单词的开始位置 
    d)   删除到某个语句的结尾位置 
    d4)  删除到第四个语句的结尾位置 
    d(   删除到某个语句的开始位置 
    d)   删除到某个段落的结尾位置 
    d{    删除到某个段落的开始位置 
    d7{   删除到当前段落起始位置之前的第7个段落位置 
    dd     删除当前行 
    d/text 删除从文本中出现“text”中所指定字样的位置, 
           一直向前直到下一个该字样所出现的位置(但不包括该字样)之间的内容 
    dfc    删除从文本中出现字符“c”的位置,
           一直向前直到下一个该字符所出现的位置(包括该字符)之间的内容 
    dtc    删除当前行直到下一个字符“c”所出现位置之间的内容 

    dL   删除直到屏幕上最后一行的内容 
    dH   删除直到屏幕上第一行的内容 
    dG   删除直到工作缓存区结尾的内容 
    d1G  删除直到工作缓存区开始的内容 


    将光标移到需要删除的行处按 Ctrl+G 显示行号,再到结尾处 Ctrl+G 显示结尾的行号。
    假设2次得到的行号为20和100,则把这期间的内容全删除
    :20,100d  删除从20行到100行的内容
    
    也可以在要删除的开始行和结束行中用ma、mb命令标记,然后用下面命令删除。
    :a,bd


复制操作(yank) 
    yy 或者 Y      复制光标所在行。拷贝一行到剪贴板中
    nyy 或者 nY    复制从光标所在行开始向下的n行。拷贝n行到剪切板中
    y1G    复制从光标所在行开始,到第一行的所有行
    yG     复制从光标所在行开始,到最后一行的所有行
    y$     复制从光标所在位置,到行尾的所有字符
    y0     复制从光标所在位置,到行首的所有字符  
    yw     拷贝一个单词。如果要复制整行的最简单办法就是V,y,p 就行了  
    yfa              表示拷贝从当前光标到光标后面的第一个a字符之间的内容.
    dfa              表示删除从当前光标到光标后面的第一个a字符之间的内容.
    5fx              表示查找光标后第 5 个 x 字符.
    5w(e)            移动光标到下五个单词.
    5yy              表示拷贝光标以下 5 行.
    5dd              表示删除光标以下 5 行.
    y2fa             表示拷贝从当前光标到光标后面的第二个a字符之间的内容.
    :12,24y          表示拷贝第12行到第24行之间的内容.
    :12,y            表示拷贝第12行到光标所在行之间的内容.
    :,24y            表示拷贝光标所在行到第24行之间的内容. 删除类似.
    
粘贴操作(paste)
    p(小写):取出剪贴板中内容的命令,并在光标所在位置向下新开辟一行,粘贴
    P(大写):向当前行的上面一行粘贴    
    
撤销与重做操作(undo,redo)
    u      (Undo)撤销上一个操作(也就是一步一步撤销)
    U:     撤销当前文本的全部编辑
    Ctrl+r (Redo)重做上一个操作
	

重复操作
    .(英文的句号)       重复上一操作,就是重复上一次操作命令


替换操作(replace)
    r     替换光标所在处字符
    R     进入替换模式,直至按ESC退出
    cc    替换光标所在行
    cw    替换光标所在的英文单词
    ~     转换大小写


排版操作
    :le<ft>     光标所在行左对齐(left)
    :ri<ght>    光标所在行右对齐(right)
    :ce<nter>   光标所在行居中(cneter)
    gg=G        可用于代码的自动缩进排版
    [n]>>       从光标所在行开始向下[n]行文本行右移一个tab操作(编程时格式对齐有用)
    [n]<<       从光标所在行开始向下[n]行文本行左移一个tab操作(编程时格式对齐有用)

    缩进代码
        >    行左移。可视模式(按v键后)。选中文本左移。该命令用于调整源码缩进格式简便快速。
        <    行右移。可视模式(按v键后)。选中文本右移。该命令用于调整源码缩进格式简便快速。
        v    选定后按 = 就是自动格式化代码,自动缩进,内部的递归的缩进都做到了

    函数间跳转
        ctrl+]和ctrl+T    分别是查找函数的定义和返回, 需要ctag的支持
        i                 跳转到光标所指标识符的定义行,是打开一个新的小窗口显示,记住要加个 i,
                          最好是找自己项目下的文件,否则找库函数的话还不如man.
        大写 K            看光标所指标识符的 man 帮助页


TAB
    TAB 就是制表符, 单独拿出来做一节是因为这个东西确实很有用.
    >                    输入此命令则光标所在行向右移动一个 tab.
    5>>                  输入此命令则光标后 5 行向右移动一个 tab.
    :12,24>              此命令将12行到14行的数据都向右移动一个 tab.
    :12,24>>             此命令将12行到14行的数据都向右移动两个 tab.
    
    那么如何定义 tab 的大小呢? 有人愿意使用 8 个空格位, 有人用4个, 有的用2个。
    有的人希望 tab 完全用空格代替, 也有的人希望 tab 就是 tab. 没关系, vim 能
    帮助你.以下的设置一般也都先写入配置文件中, 免得老敲.
    
    :set shiftwidth=4    设置自动缩进 4 个空格, 当然要设自动缩进先.
    :set sts=4           即设置 softtabstop 为 4. 输入 tab 后就跳了 4 格.
    :set tabstop=4       实际的 tab 即为 4 个空格, 而不是缺省的 8 个.
    :set expandtab       在输入 tab 后, vim 用恰当的空格来填充这个 tab.



折叠代码
    zf      进行折叠, 用 zo 打开折叠,也可以方向键向右打开折叠,
    zc      折叠 (只要在被折叠的块中的任一个语句就行)
    zi      展开所有折叠
    zC      对所在范围内所有嵌套的折叠点进行折叠
    zo      展开折叠
    zO      对所在范围内所有嵌套的折叠点展开



常用多缓冲区操作按键

    vim下每一个打开的文件对应一个缓冲区(buffer)。
    多文件编辑会有两种情形: 
        一种是在进入 vim 前所用的参数就是多个文件(这种情形称为 argument list)。
        另一种情形是进入 vim 后另外再开其它的文件(称为 buffer list)。不过都可以统称为buffer。

    注意:  :e 或者:new 或者:split 后边可以跟目录,这样就可以在目录下慢慢找要打开的文件了

    :n     编辑下一个文件。
    :2n    编辑下二个文件。
    :N     编辑前一个文件。注意,这种用法只能用于 argument list 的情形。
    :rew   回到首文件
    :args  查看当前编辑缓冲文件状态
    :e# 或 Ctrl-^   编辑前一个档案,用于两文件互相编辑时相当好用。
    :ls    显示缓冲区中的文件,编号后边有#的代表是前一个文件,可以通过:e#来进入,
           有%a的代表是当前文件,什么也没有的可以通过:bn来进入,这里的n代表文件编号。
    :b     文件名或编号   移至该文件。
    :ls    列出打开各个文件的编号,没有离开vim前编号是不会变的。这个指令 elvis 也是可以使用。
           当然 :e#编号 也是可以的,这样的用法则是所有 vi clone 都通用了。
    :files 或 :buffers 或 :ls   会列出目前 buffer 中的所有文件。
    
    在 buffers 中,减号 - 表示这个 buffer 并未载入,不过,不必担心,载入相当快速的。
    加号 + 表示这个 buffer 已经修改过了。

    :b 序号(代号)     此命令将指定序号(代号)的文件在本窗口打开, 
                     其中的序号(代号)就是用 :ls 命令看到的.
    :set diff        此命令用于比较两个文件, 可以用 :vsp filename命令打开另一个文件, 
                     然后在每个文件窗口中输入此命令,就能看到效果了.
 

    1、多文件编辑模式
        (1)argument list模式,就是在打开vim编辑器时,携带多个文件路径参数。
        (2)buffer list模式,就是在进入vim编辑器后,打开多个缓冲区进行编辑。
        
    2、单一缓冲区打开多个文件
        :files 显示目前打开了哪些文件
        :n 切换到下一个缓冲区内容
        :N 切换到上一个缓冲区内容
        :2n 切换到下下个缓冲区内容
        :bn 下一个缓冲区内容(buffer next)
        :bp 上一个缓冲区内容(buffer previous)
    
    3、多个缓冲区打开多个文件
        :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 使光标所在缓冲区最大化,其他缓冲区隐藏


    4.重新编辑
        放弃一修改过的文件,重新编辑。
        (1)使用命令 :q!强行退出后再vi flname重新进入。
        (2)使用命令 :e!强行重编辑更便捷。这样也是会打开文件,但会放弃目前编辑文件的改变,
                    否则如果文件已有变动,vim 预设是不让您随便离开的。
                    :e! 后不接什么的话,代表舍弃一切修改,重新载入编辑中文件。


常用搜索与书签操作快捷键
    1. 搜索字符串                             :%s/word//gn   统计 word 个数
        /string       向下 搜索字符串“string”
        ?string       向上 搜索字符串“string”
        /^字符串      查找以“字符串开始”的行
        /字符串$      查找以“字符串结尾”的行
        /a.b          查找字符串a任意字符串b
    2. 重复上次搜索
        n    根据上次搜索条件找到下一个匹配的字符串(即搜索完向下查找)。即 寻找下一个。
        N    根据上次搜索条件找到上一个匹配的字符串(即搜索完向上查找)。即 回到前一个。 
    3. 搜索单词
        *     向下 搜索光标所在处的单词(完全匹配)
        #     向上 搜索光标所在处的单词(完全匹配)
        g*    向下 搜索光标所在处的单词(部分匹配)。即 匹配包含该单词的所有字符串.
        g#    向上 搜索光标所在处的单词(部分匹配)。即 匹配包含该单词的所有字符串.
        gd    查找与光标所在单词相匹配的单词, 并将光标停留在文档的非。
              注释段中第一次出现这个单词的地方.   
        %     本命令查找与光标所在处相匹配的反括号, 包括 () [] {}
        f(F)x     在光标所在行进行查找, 查找光标右(左)方第一个x字符。
                  找到后:输入 ; 表示继续往下找输入 , 表示反方向查找
    4. 标记书签(mark)
        ma a为小写字母,为光标所在处设定文档书签a
        mA A为大写字母,为光标所在处设定全局书签A
    5. 使用书签(mark)
        `a  到文档书签a处,Tab键上方
        'a  到文档书签a所在行行首处,Enter键左边
        `A  到全局书签A处,Tab键上方
        'A  到全局书签A所在行行首处,Enter键左边
        `n  如果n=0,缓冲区将打开上一次的文档,且光标在上次编辑最后的位置,1-9 以此类推
        'n  如果n=0,缓冲区将打开上一次的文档,
            且光标在上次编辑最后的位置所在行的行首,1-9 以此类推
    6. 查看书签列表
        :marks 查看当前所有书签


替换命令
   	s/str1/str2/gi   解释:/ : 临近s命令的第一个字符为边界字符:/,@,#
	                      g : 一行内全部替换
	                      i : 忽略大小写

    注意: 其中s为substitute(替代、代替),%表示所有行,g表示global(总体的)。

    :g/^/exec "s/^/".strpart(line(".")." ", 0, 4)    在行首插入行号
    :runtime! syntax/2html.vim            转换 txt 成 html, 会按照你的颜色配置来转 
    
    :s/p1/p2/g        将当前行中 所有p1 均用p2替代
    :s/p1/p2/         不加g表示只把“当前行的第一个”替换
    :%s/abc/123/g     将所有行的abc替换成123
    :12,23s/aa/bb/g   将从12行到23行中出现的所有包含 aa 的字符串中的 aa 替换为 bb
    :12,23s/^/#/      将从12行到23行的行首加入 # 字符
    :%s/:.*//g        删除 文件中 从冒号开始直到行尾的所有部分。例如 文件 /etc/passwd 
    :n1,n2s/p1/p2/g   将第n1至n2行中所有p1均用p2替代
    :20,30s/word1/word2/g   将从20到30行的所有word1全部替换成word2
    :1,$s/start/end/g       从第一行开始到文件最后,将字符串start替换为end
    :1,$s/word1/word2/g     或 :1,$s/word1/word2/gc (需要使用者确认)
    :g/p1/s//p2/g           将文件中所有p1均用p2替换
    :r 文件名               在当前光标位置载入另一个文件
    
    :3,$s/^/some string/     在文件的第3行到最后一行所有的行首插入“some string”。
    :%s/$/some string/g      在整个文件每一行的行尾添加“some string”。
    :%s/string1/string2/g    在整个文件中替换“string1”成“string2”。
    :3,7s/string1/string2/   仅替换文件中的第3行到第7行中的“string1”成“string2”。
    
    :%s#/usr/bin#/bin#g    把文件中所有路径/usr/bin换成/bin。
    也可以使用命令 “:%s//usr/bin//bin/g” 实现,其中“#”是转义字符,
    表明其后的“/”字符是具有实际意义的字符,不是分隔符。
    
    使用以下方法删掉文件中所有的空行及以#开始的注释行。
    cat squid.conf.default | grep -v ^$ | grep -v ^#

    :%s/r//g           删除DOS方式的回车^M 
    :%s= *$==          删除行尾空白 
    :%s/^(.*)n1/1$/    删除重复行 
    :%s/^.pdf/new.pdf/ 只是删除第一个pdf 
    :%s///             又是删除多行注释(咦?为什么要说「又」呢?) 
    :g/^\s*$/d         删除所有空行
    :g!/^dd/d          删除不含字符串'dd'的行 
    :v/^dd/d           同上 (译释:v == g!,就是不匹配!) 
    :g/str1/,/str2/d   删除所有第一个含str1到第一个含str2之间的行
    :v/./.,/./-1join   压缩空行 
    :g/^$/,/./-j       压缩空行 
    ndw 或 ndW         删除光标处开始及其后的 n-1 个字符。 



末行模式
        set:设置
        	set nu  number
        	set nonu nonumber
        	set readonly
        	
        /:查找
        	/after(查找指定字符串)
        	n,N(向下跳,向上跳)
        	?向上查找
        	!:执行命令
        	:!ls -l /
        	
        s查找并替换
        	s/str1/str2/gi
        	/:临近s命令的第一个字符为边界字符:/,@,#
        	g:一行内全部替换
        	i:忽略大小写
        	
        范围
        	n:行号
        	.:当前光标行
        	+n:偏移n行
        	$:末尾行,$-3
        	%:全文

高效移动

光标移动效率是vim程序员达到甚至超过鼠标流程序员的关键技能。vim中的移动光标的方式有很多,我来举几个我实际使用过程中应用比较频繁的技巧:

set relativenumber(显示相对行号)。我无意间发现的一个十分实用的技巧,比set number显示行号更好用。通过这个设置,行号的显示会根据当前的光标的相对位置显示成偏移数,并动态变化。这个好处是,可以利用数字+j 数字+k来进行多行跳转,因为是编译行数,所以数字不会太大。否则就算要向下移动10行,我们可能也需要用138gg

  • web:按照单词进行前后光标跳转,也可以组合数字进行跳转,不过以我的经验,与其去算要跳多少个单词,不如多按几次吧。
  • IA:移动到行首或行末的第一个字符处,并进入插入模式。
  • HML:光标分别跳转到可视区域的最上面、中间、最下面。
  • Ctrl+DCtrl+U:有时,需要看的文本不在可视区域,通过这些组合进行上下翻页。
  • ^$0:光标移动到行首和行尾(0是绝对行首)。不过因为^$都需要同时按住shift,而且数字键我们往往难以盲打,所以我一般直接使用I+EscA+Esc
  • %:移动到与当前括号匹配的括号处。

  • gjgk:有时可视区域不够宽,而一行的字符有很多,导致了wrap。那么通过jk是无法直观的定位到同一物理行,却不在同一个可视行里的位置,此时需要gjgk
  • fF:通过上面的例子,我们知道,f是find的意思,可以在一行内查找某个字符出现的位置,并直接跳转过去。比如f<可以从当前光标开始向右,找到第一个<,并移动过去。F是向左查找。
  • ;:重复上一次的f查找操作
  • .:重复上一次的修改操作,跟;可以说是好基友,经常用来实现一些简单的重复操作,比录制宏要简单很多。经常有意识的使用这种简单重复,是vimer编辑思路进阶的分水岭。

高效修改

vim的另一个优势是高效修改。在vim下修改就要改掉传统鼠标流的思维方式,切忌提到修改就按i。有很多高效的修改办法,而且这些办法往往是可重复的。下面举一些我常用的例子:

  • r:替换模式,替换当前光标所在位置的一个字符。虽然你同样可以i进入插入模式,然后删掉那个字符,再输入需要的字符,但这种操作是鼠标流思维方式。替换是一个可重复操作,多用没坏处。
  • cwchange word可以删除从当前位置到一个单词的结尾,并进入插入模式。这种操作常用于修改一个变量。比如对于:int count=0;希望把count改成cnt,那么当光标位于c字符处的时候,按cw可直接删除count,并进入插入模式。然后直接继续输入cnt即可。
  • cawchange a word可以删除当前光标所在位置的单词。对于int count=0;的例子,如果此时光标在count中间某处,比如u处,直接键入caw可以达到同样的效果。所以caw更强大一些。
  • c$c^:举一反三,可以猜到c$是从当前位置删除到行尾,并进入插入模式。
  • ci"change inside "可以用于修改当前位置附近,在相同配对的"中的内容。比如对于const char *str="hello world";。当在双引号中间的任意位置键入ci"可以直接清空字符串,并继续输入新的希望的字符串。
  • ci(ci[:举一反三change inside ( change inside [
  • cit:这个比较特殊,可以直接编辑匹配的xml标签中的内容!经常编写html的童鞋可以熟悉一下。
  • yi"yank inside " 猜猜是啥意思?类似ci"只是把编辑操作编程复制操作,因为y是复制!是不是很强大。
  • ya"yank around " 复制整个字符串,包括双引号。
  • ywyawdawd$...:好了,这些可以"发明"出来了。
  • oO:向下向上增加空行
  • uCtrl+r:undo和redo

上面的例子体现了vim组合的思想,很多命令可以通过组合得到不同的效果。

Linux 编辑 windos 文件特殊字符问题

在linux下,不可避免的会用VIM打开一些windows下编辑过的文本文件。

会发现文件的每行结尾都会有一个^M符号,这是因为 DOS下的编辑器和Linux编辑器对文件行末的回车符处理不一致。

^M字符的来历和作用:
        在DOS/Windows里,文本文件的换行符为\r\n,而在*nix系统里则为\n,所以DOS/Windows里编辑过的文本文件到了*nix里,每一行都多了个^M。
        所以^M只是一个换行符号,没有实际的用处,我们可以将它保留,也可以将它删除。

对于回车符的定义: 

windows:0D0A // 对应 \r\n unix\linux: 0A // 对应 \n MAC: 0D // 对应 \r 删除换行 可以用以下命令删除换行符: :%s/\n//g 可以用以下命令删除DOS文件中的回车符“^M”: :%s/\r//g 可以用以下命令转换DOS回车符“^M”为真正的换行符: :%s/\r/\r/g 可以用以下命令删除行尾的空格以及DOS回车符。它没有使用“/”字符作为替换命令各个参数间的分隔符,而是使用了“#”字符。命令还使用了“\?”正则表达式,用来匹配它前面出现的字符0次或1次。 :%s#\s*\r\?$ 可以用以下命令删除三行空行: :%s/^\n\{3}// 可以用以下命令将连续的两个空行替换成一个空行: :%s/\n\n/\r/g 替换命令的基本语法 在全局替换中,ex编辑器使用指定的字符模式对文件中的每行进行检查。在所有行中发现模式的位置,ex使用新字符串来替换模式。 全局替换真正使用的是两个ex命令是 :g(global全局)和:s(switch替换)。 替换命令的语法如下: :s / old / new / 这将把当前中模式old的第一次出现修改为new。 /(斜杆)是命令不同部分之间的分隔符(当斜杆为该行的最后一个字符时,可不写) 下面这种形式的替换命令: :s / old / new / g 把当前行old的每次出现改为new,而不只是该行的第一个old。:s命令允许替换串后面带有选项,上面语法中的g代表全局(g选项影响一行中的每个模式,不要把它与影响文件中所有行的:g命令混淆) 通过在:s命令前加上地址前缀,可以把它的范围扩展到多行。例如下面命令把50行到100行的old的每次出现都改为new: :50, 100 s / old / new / g 下面的命令把整个文件中的old的每次出现都改为new: :1, $s / old / new / g 我们知道%等价于1,$,所以上行命令也可以这样写: :% s / old / new / g 确认替换 使用搜索替换命令有时候会出错,而得到不想要的结果。所以小心并确认文件中需要修改的内容是一个明智的做法 在替换命令尾部加上c (confirm用于确认),在替换每个old前都会提示并确认: :1, 30 s /old/new/ gc 将会出现提示replace with hehe (y/n/a/q/l/^E/^Y)? y替换,n不替换,a替换所有,q放弃,l替换第一个并进入插入模式,^E和^Y是提示你用Ctrl+e或Ctrl+y来滚动屏幕的。 上下文相关替换 除了直接使用一个单词(或短语)替换另一个,还有稍微复杂的全局替换语法。这些语法可以对一个模式进行搜索,一旦找到含有模式的行,就可以使用不同与模式的串进行替换,我们把这种替换叫做上下文相关替换。 语法格式如下: :g /pattern/s/old/new/g 将会把包含pattern的行中,把所有old替换为new 第一个g表示是在文件的所有行上执行的命令,模式pattern识别要发生替换的行。在那些包含模式pattern的行上,ex将把old替换(s)为new。最后的g表示在该行上进行全部替换。 如果用来进行搜索的模式与想要修改的模式相同,那么就不必重复它: :g/string/s//new/g 等价于 :g/string/s/string/new/g 还要注意: :g/string/s//new/g 也等价于 :% s/string/new/g 可以用第二种方式少输一些字符 回车在vim的输入方法是ctrl+V,会得到^,此时再按回车.会得到^M这个就是回车了 因此把全文件所有str换成str回车的语句是: : 1,$ s/str/str^M/g ^M用上面的方法输入 1,$表示从1到最后一行,s是switch,g是global

比较快捷的去除这些符号的方法有这么几种: 

讯享网(1)使用VI的命令: 使用vi打开文本文件 vi dos.txt 命令模式下输入 :set fileformat=unix :w (2)VI下使用正则表达式替换 g/\r/s///g 或者 %s/\r//g (3)使用sed 工具 sed ’s/\r//’ filename > tmp_filename (4)既然window下的回车符多了‘\r’,那么当然通过删除‘\r’ ,也可以实现: tr -d '\r' (5)最后一个方法是本人最常用的方法,个人觉得最方便 在终端下敲命令: $ dos2unix filename 直接转换成unix格式,就OK了!~

用vim时,想高亮显示一个单词并查找的方发,将光标移动到所找单词.

1: shift + "*"  向下查找并高亮显示

2: shift + "#"  向上查找并高亮显示

3: "g" + "d"    高亮显示光标所属单词,"n" 查找!

一般指令模式

移动游标

按键 说明
h 或向左方向键 游标向左移动一个字元
j 或向下方向键 游标向下移动一个字元
k 或向上方向键 游标向上移动一个字元
l 或向右方向键 游标向右移动一个字元
[ctrl]+[f] 屏幕向下移动一页,相当于[Page Down](常用)
[ctrl]+[b] 屏幕向上移动一页,相当于[Page Up](常用)
[ctrl]+[d] 屏幕向下移动半页
[ctrl]+[u] 屏幕向上移动半页
n+[Space] n 表示数字,按下数字后再按空格键,游标会向右移动到这一行的第 n 个字元。
功能键[Home]或 0 游标移动到这一行的第一个字元处
功能键[End]或 $ 游标移动到这一行的最后一个字元处 (常用)
H 游标移动到这个屏幕最上方那一行的第一个字元
M 游标移动到这个屏幕中央那一行的第一个字元
L 游标移动到这个屏幕最下方那一行的第一个字元
G 游标移动到这个档案的最后一行 (常用)
nG n 为数字。游标移动到这个档案的第 n 行
gg 游标移动到这个档案的第一行 (常用)
n+[Enter] n 为数字。游标向下移动 n 行 (常用)

搜索与取代

按键 说明
/word 在当前游标所在位置往下寻找关键字为 word 的字符串 (常用)
?word 在当前游标所在位置往上寻找关键字为 word 的字符串
n 这里的 n 是按键 n。代表重复前一个搜索动作
N 这里的 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,不同之处是在替换前显示提示字元,由用户确认是否最终替换 (常用)

注意: 使用 /word 的同时,配合使用 n 或者 N,搜索可以变得很方便的啦 :)

删除、复制以及粘贴

按键 说明
[Del] 或 x 向后删除一个字元 (常用)
X 向前删除一个字元 (常用)
nx n 为数字,表示连续向后删除 n 个字元
dd 删除游标所在的那一行 (常用)
ndd n 为数字,删除游标所在的那一行往下数 的 n 个行 (常用)
d1G 删除游标所在的那行到第一行的所有数据
dG 删除游标所在的那行到最后一行的所有数据
d$ 删除游标所在处到该行的最后一个字元
d0 是数字 0,删除游标所在处到该行的第一个字元
yy 复制游标所在的那一行 (常用)
nyy n 为数字, 复制游标所在的那一行往下数 n 行 (常用)
y1G 复制游标所在行到第一行的所有数据
yG 复制游标所在行到最后一行的所有数据
y0 复制游标所在的字元到该行行首的所有数据
y$ 复制游标所在的字元到该行行尾的所有数据
p 将已复制的数据粘贴在游标所在的那一行的下一行 (常用)
P 将已复制的数据粘贴在游标所在的那一行的上一行,原来游标所在的那一行会被推后一行 (常用)
J 将游标所在的行与下一行的数据合并为一行
u 撤销前一个操作 (常用)
[ctrl]+r 重做上一个被撤销的操作 (常用)
. 这是小数点,表示重复前一个操作 (常用)

注意: 最后三个按键乃是神器,熟悉后记得经常使用它们,会让你觉得使用 vim 是一件很快乐的事情哦 :)

一般指令模式切换到编辑模式

按键 说明
:w 将编辑的文件写入硬盘 (常用)
:w! 如果文件为只读状态,可以强制写入硬盘,是否写入成功,与你所拥有的文件权限有关
:q 离开 vi (常用)
:q! 即使文件未保存,仍强行离开 vi
:wq 文件写入硬盘后(即保存)离开 vi (常用)
:wq! 文件强制写入硬盘后(即保存)离开 vi
ZZ 大写字母 Z,如果文件没有修改,则直接离开;如果文件被修改,则保存后离开
:w [filename] 将当前文件另存为另一个文件,这个新文件的保存路径为当前路径
:r [filename] 在当前文件中读入另一个文件的数据,插入到当前游标所在列的后面
:n1,n2 w [filename] 将第 n1 行到第 n2 行的数据储存为新的文件
:! command 暂时离开 vi 到指令列模式下执行 command 的显示结果

注意: ! 表示强制执行

vim 特有功能

区域选择

按键 说明
v 字符选择,移动游标,游标经过的地方会反白选择
V 行选择,移动游标,游标经过的行会反白选择
Ctrl + v 区块选择,移动游标以长方形方块的方式反白选择
y 复制反白选择的地方
d 删除反白选择的地方
p 将之前复制的区块,粘贴在游标所在处

vim块选择
        V: 字符选择,会把光标经过的位置反白选择
        v: 行选择,会把光标经过的行反白选择
        Ctrl + v: 块选择,可以使用长方形的方式反白选择内容
        y: 将反白的地方复制
        d: 将反白的地方删除
其中 V 或者 v 来选择内容都可以使用 鼠标 来完成,至于块选择就比就特殊了。
如图,使用 Ctrl+v 来选择图中矩形反白的部分,可以按y进行复制,或者按d删除。

多文件编辑

按键 说明
:n 编辑下一个文件
:N 编辑上一个文件
:files 列出 vim 所打开的所有文件

注意:使用 vim a.txt b.txt … 指令,就能一次打开多个文件

多视窗

按键 说明
:sp [filename] 开启一个新视窗。如果有加 filename,表示是在新视窗开启一个新文件;否则,表示两个视窗为同一个文件的内容(即同步显示)
[ctrl]+w+向下方向键 先按下[ctrl]不放,然后再按下 w 后放开所有按键,最后再按下向下方向键,游标就会移动到下方的视窗
[ctrl]+w+向上方向键 按键方法同上,游标会移动到上方的视窗
[ctrl]+w+q 关闭当前游标所在的视窗

补齐

按键 说明
[ctrl]+x -> [ctrl]+n 依据目前正在编辑的文件内容作为关键字,予以补齐(语法依据副档名)
[ctrl]+x -> [ctrl]+f 依据当前目录下的文件名,予以补齐
[ctrl]+x -> [ctrl]+o 以副档名作为语法关键字,予以补齐

环境设定参数

按键 说明
:set nu 设定行号
:set nonu 取消行号
:set hlsearch 搜索到的关键字反白显示 (默认)
:set nohlsearch 搜索到的关键字取消反白显示
:set autoindent 自动缩排 (默认)
:set noautoindent 不自动缩排
:set backup 自动存储备份档(备份档名为 filename~)
:set ruler 显示右下角状态说明
:set showmode 显示左下角状态说明(比如 INSERT)
:set backspace=(012) 倒退键设置;2:可以删除任意值;0 或者 1,仅可删除刚刚输入的字符,无法删除原来就存在的字符
:set all 显示所有环境参数设定值
:set 显示与系统默认值不同的设定值
:syntax on 开启语法着色
:syntax off 关闭语法着色
:set bg=dark 开启语法着色深色方案
:set bg=light 开启语法着色浅色方案 (默认)

一些配置

set modelines=0 color asmanian2 " 设置背景主题 set linespace=2 " 字符间插入的像素行数目 set background=dark " 设置背景 set mouse=a "允许鼠标 set autowrite " 自动保存 set wildmenu " 增强模式中的命令行自动完成操作 set showmode " 开启模式显示。显示左下角状态说明(比如 INSERT) set ruler " 开启光标位置提示。显示右下角状态说明,打开状态栏标尺。 set number " 显示行号 set history=1000 " 历史记录数 set cursorline " 突出显示当前行 set cmdheight=2 " 命令行(在状态行下)的高度,默认为1,这里是2 set laststatus=2 " 总是显示状态行 set magic " 设置魔术 set confirm " 在处理未保存或只读文件的时候,弹出确认 set autoindent " 自动缩进 set cindent set smartindent " 智能缩进 set autoread " 当文件在外部被改变时,vim自动更新载入 set scrolloff=3 " 光标移动到buffer的顶部和底部时保持3行的距离 set showmatch " 显示匹配的括号 set matchtime=5 " 对应括号高亮时间(单位是十分之一秒) set ignorecase smartcase " 搜索时忽略大小写,但在有一个或以上大写字母时仍保持对大小写敏感 set nowrapscan " 禁止在搜索到文件两端时重新搜索 set hlsearch " 搜索到的关键字反白显示 (默认) set incsearch " 搜素高亮,搜索逐渐高亮 "set nohlsearch " 搜索到的关键字取消反白显示 syntax on " 语法高亮 autocmd InsertLeave * se nocul " 用浅色高亮当前行 autocmd InsertEnter * se cul " 用浅色高亮当前行 set showcmd " 输入的命令显示出来,看的清楚些 set backspace=2 " 倒退键设置;2:可以删除任意值;0 或者 1,仅可删除刚刚输入的字符,无法删除原来就存在的字符 set bg=dark " 开启语法着色深色方案 set bg=light " 开启语法着色浅色方案 (默认) set completeopt=preview,menu "开启normal 或visual模式下的backspace键空格键,左右方向键,insert或replace模式下的左方向键,右方向键的跳行功能 set whichwrap=b,s,<,>,[,] set foldenable " 允许折叠 set foldmethod=syntax " 设置语法折叠 set foldcolumn=0 " 设置折叠区域的宽度 set foldlevel=3 " 设置折叠层数为 setlocal foldlevel=1 " 设置折叠层数为 set nocompatible " 不要使用vi的键盘模式,而是vim自己的 set tabstop=4 " Tab键的宽度 set softtabstop=4 " 统一缩进为4 set shiftwidth=4 " 统一缩进为4 set noexpandtab " 不要用空格代替制表符 set smarttab " 在行和段开始处使用制表符 " 状态行显示的内容(包括文件类型和解码) set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [%{&encoding}]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%Y\ -\ %H:%M\")} " set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%] " set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ filetype on " 侦测文件类型 filetype plugin on " 载入文件类型插件 filetype indent on " 为特定文件类型载入相关缩进文件 filetype plugin indent on " 开启插件 alias egrep='egrep --color=auto' alias fgrep='fgrep --color=auto' alias grep='grep --color=auto' alias l='ls -CF' alias la='ls -A' alias ll='ls -alF' alias ls='ls --color=auto'
小讯
上一篇 2025-01-07 19:46
下一篇 2025-03-03 20:22

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/40388.html