VIM操作

作者: spfanlost | 来源:发表于2017-07-15 11:23 被阅读0次

    待整理~

    1、vim ~/.vimrc 进入配置文件

    如果不知道vimrc文件在哪,可使用 :scriptnames 来查看

    set nu      #行号
    set tabstop=4  #一个tab为4个空格长度
    set ai  #设置自动缩进
    syntax on   #高亮
    

    2、基本编辑快捷键

    空格键 向右移动一格
    x 删除后面的字符  X 删除前一个字符. 删除3个字符就是3x  
    dd 删除一行  D 删除到行尾 
    u 撤销上一次操作  U 撤销当前行的所有修改
    ctrl+r 对撤消的撤消
    i 在光标前插入  I 在行首插入 
    a 在光标后插入  A 在行末插入
    o 在当前行的下面另起一行,并变为插入模式 O 在当前行上面另起一行,变为插入模式
    Ctrl+o 临时变成命令模式(一次而已)
    :e! 放弃更改,然后相当于重新打开
    :help 帮助,可用ZZ退出帮助窗口
    

    vim中Nyy可以复制光标后的N行。有时我们不容易得出行数,这时可以用做标记的方法来制定复制范围:  1. 在开始行上输入ma作一个标记a  2. 移动到结束行,输入y'a会复制当前行到标记a之间的文本。d'a会删除。或者是v进入可视模式,再13G跳转到相应行,y即可。
    :10,20y 回车即可,相应的删除也是如此 :10,20d (此方法比上面两种方法更简单)
    :10,20 m 30 把10行到20行的内容,剪切到30行之后
    :10,20 co 30 把10行到20行的内容,复制到30行之后
    将光标放在 { 处,然后输入v%就可以把大括号中内容选定
    如果光标放在第一个s上,想删除到“(”为止,则输入dt(就可以了,t(的作用是跳到下一个"("前。
    ctrl +n 自动补全 ctrl + p 也一样
    :ab hw hello world 用一个缩写字符串代替一个长的字符串,此处用 hw 代替 hello world
    %: 移动到与制匹配的括号上去(),{},[],<>等
    ' 移动到上一次的修改行
    fx 向右跳到本行字符x处(x可以是任何字符)Fx 向左跳到本行字符x处(x可以是任何字符)tx 和fx相同,区别是跳到字符x前Tx 和Fx相同,区别是跳到字符x后

    到与当前单词相同的上一个单词上, * 到与当前单词相同的下一个单词上

    如果你要重复键入一个短语或一个句子, 也有一种快捷的方法。Vim有一种记录宏的机制。你键入"qa"开始把一段宏记录入寄存器变量a'中。按下来你可以象平常一样键入你要的操作, 只是这些操作都会被Vim记录进它命名为a'的宏中, 再次再下"q"键, 就结束了宏`a'的录制。当你要重复执行你刚才记录的那些操作时只要使用"@a"命令。共有26个可用的寄存器供你记录宏。 使用宏你可以重复多个不同的操作。而不仅仅是插入文本了。如果你要进行某种重复的操作, 记着要用这一招呀。
    :abbr hte the
    :abbr hw Hello World
    输入先面的单词时,自动用后面的替换。

    3、移动:
    b、3b、w、3w:向前\后移动几个单词,标点也算一个单词。相应的大写状态为不含标点,即只把空格和换行符作为单词间隔符。
    $:移动到行尾 3$:移动到3行后的行尾
    ^:移动到行首,0也是
    +:移到下一行的行首
    -: 移到上一行的行首
    f:搜索命令,小写时向后搜索(用来定位)如 fx:定位到下一个x上。 Fx:定位到上一个x上,重复时,可用;或, 不过 , 表示反方向
    %:跳到相对应的括号上,编程时常用
    33G:跳转到33行 此时按``可以返回到原来行
    gg:文件头 G: 文件尾
    30%:跳转到文件的30%处
    "H"意为Home, "M"为Middle, "L"为Last. 当前屏幕的上中下位置,大小写皆可
    Ctrl+G:显示当前位置
    set number:设置显示行号,set nonumber:关闭显示
    :set ruler 设置在窗口右下角显示行号,与上面的好处是,节省空间
    ctrl+u\d 向上\下滚动半屏
    ctrl+e\y 向上\下滚动一行
    ctrl+b\f 向上\下滚动一屏  这个比较实用,记住。
    zz:将当前行滚动于屏幕中间,方便查看上下文 zt置顶,zb置尾
    /string 查找string,回车后,按n键可以跳到下一个,N上一个,另外按/键后,按上下键可以找到以前查找的记录,同样的 :也有记录
    ?/string 同上,默认向上查找
    :set ignorecase 大小写无关
    :set noignorecase 大小写敏感

    • :查找下一个光标所在单词 #是查找上一个
      :set hlsearch 高亮显示查找结果
      :set nohlsearch 取消高亮
      :nohlsearch 去掉当前显示的高完(一次性)
      `` 上次光标停靠的行
      % 匹配到相应括号处

    向右移动本行一段距离 << 向左移动本行一段距离 3<< 把下面3行(包括本行),向左移动一段距离 :20,30>> 把20行到30行向右移动一段距离

    4、小幅改动:
    :%s/str1/str2/g 替换每一行的 str1为 str2
    :10,20s/str1/str2/g 替换从行10到行20之间的 str1为 str2
    :10,$s/str1/str2/g 替换从行10到最后一行之间的 str1为 str2
    :s/str1/str2/g 替换当前行的 str1为 str2
    . 重复执行命令
    :10,$ w test2.cpp 取行10到最后一行内容,保存到test2.cpp
    :r class/User.hpp 读取文件中的内容,插入到当前行的后面
    dw:删除一个单词(光标后部分) 不如:daw实用    d4w:删除4个单词    d$:删除当前光标到行尾    d^:删除当前光标至行首     d换成c效果是一样的,只是操作完会变成insert模式 dnw: 删除N个单词 dnj: 向下删除n行 dnk: 向上删除n行
    X:删除左边的字符,相当于<-键,x删除当前字符  D:相当于d$  C:相当于c$  s:相当于c1  S:相当于cc
    r:替换当前字符,但不会进入insert模式    3r:把后面3个字符替换掉    R:替换模式
    .:重复上一次操作
    v:进入Visual模式    V:进入可视行模式,比如 Vjjd 删除3行  Ctrl+v:可视块模式
    P:粘贴至光标前    p:粘贴至光标后    3P:粘贴3次 "2p 粘贴最后第二次的删除的内容
    yy:复制一行  yaw: 复制一个单词,光标在单词任意位置 ynw: 复制N个单词 ynj: 向下复制n行 ynk: 向上复制n行
    自动缩进:
    :set cindent(所有的set都可以简写为se,虽然只节省了一个字符, 译者注) 需要注意的是cindent控制缩进量是通过shiftwidth选项的值, 而不是通过tabstop 的值, shiftwidth的默认值是8(也就是说, 一个缩进为8个空格, 译者注), 要改变默认的设置, 可以使用":set shiftwidth=x"命令, 其中x是你希望一个缩进量代表的空格的数目.
    { = 到前一个空行上} = 到下一个空行上

    5、VIM的一些插件:
    c.vim :如果是用root账号的,把文件复制到/usr/share/vim/vim70中解压没有用的,不存在 $HOME/.vim 这个目录,没办法,只能新建个目录,然后把压缩包cp到这个目录,再unzip即可。在 ~/.vimrc 中 写入 filetype plugin on

    :e! 返回上次保存后的状态
    Ctrl+z:暂停vi,回到Unix提示符,再输入fg即可回到vi。
    ^回到行首,光标位于行首字母处;0回到行首,光标位于行首字母前。$回到行尾,光标位于行尾字母处。
    nb:向前移动n个单词,nw:向后移动n个单词。光标位于单词的第一个字母处。 nw这个操作很慢,不知何故。 以空格、标点符号与单词的分界为分隔符。(几个连续的标点视为一个单词)
    同样的,也可以使用nB,nW,只是这里只使用空格做为分隔符。
    相换两个相邻字母的位置:x、p
    s:删除一个字符,并进入编辑模式。 S:删除一整行,进入编辑模式,相当于cc。 ns:删除后面n个字符,并进入编辑模式。
    ~:更改字母的大小写,同时光标进入到下一个字符。 n~:把后面n个字母的大小写状态改变。
    dw:删除单词后面部分 db:删除单词前面部分。 如果要删除整个单词(光标位于单词中间的话),可以 dbw\wdb
    de:类似于dw,删除单词后面的部分(只删除到本单词结尾,dw会删除掉单词后面的空格) dE:删除的范围包括标号在内的单词结尾。
    e:相当于w,向后移动一个单词。不同的是,w移动到单词第一个字符上,e移动到单词最后一个字符上。 所以ea,可以给本单词追加内容。
    D:d$ 的简写,同样的,C:c$的简写。
    U:会恢复一整行原先的面貌,即最原始的样子。
    Y:相当于yy,不同于D与C的操作方法。
    .:重复上一个命令。
    除了O/o,插入命令(A,a,I,i)接受数值参数,如:5Ihello,然后按ESE键。会在行首输入5个连接的hello
    nr:替换后面n个字符。
    nJ:合并下面的n行(从本行算起)。
    ynl:向后复制n个字符。
    e/E:到单词的结尾。

    滚动整屏:
    ^f:向前(下)一整屏
    ^b:向后(上)一整屏
    ^d:向前(下)一半屏
    ^u:向后(上)一半屏
    z,Enter:将光标所在行移动到屏幕顶部(同于zz)
    z.:将光标所在行移动到屏幕中间
    z-:将光标所在行移动到屏幕尾部
    nz,Enter:将第n行移动到屏幕顶部,同样的,z. 与 z- 前也可以加数字。

    在屏幕中移动:
    H、M、L分别移动到屏幕的顶部、中间和尾部。
    nH、nL 移动到距离屏幕顶部和顶部n行的位置。

    Enter:到下一行的第一个字符。
    +:到下一行的第一个字符。
    -:到上一行的第一个字符。
    n|:移动到当前行的第n列
    e:移到单词的结尾
    E:移到单词的结尾(忽略标点符号)
    ( ) { } [[ ]] 这几个对编程作用不大,可忽略。
    d/it:向后删除到it之前的位置(不删it)。 d?it:向前删除到it之前的位置(删除it)。

    fx:本行中向右搜索x,光标置于x上。 Fx:向左搜索。; 重复上一个搜索命令,方向相同。 ,重复上一个搜索命令,方向相反。
    tx:同fx,只是光标置于x之前。 Tx类似。
    dfi:向右删除第一个i的位置(包括i) dti:同dfi,只是不包括i
    Ctrl+G 查看当前行信息
    nG跳转后,可使用``回到上一次的位置,''功能一样,不过只是回到前次位置所在行的开头,而不是确定的位置上。

    删除包含keyword字符串的行: :g/keyword/d
    删除空行::%s/^\n$//g

    vim 快捷键技巧总结

    vi(vim)是上Linux非常常用的编辑器,很多linux发行版都默认安装了vi(vim)。vi(vim)命令繁多但是如果使用灵活之后将会大大提高效率。vi是“visual interface”的缩写,vim是vi IMproved(增强版的vi)。在一般的系统管理维护中vi就够用,如果想使用代码加亮的话可以使用vim。

    vi有3个模式:插入模式、命令模式、低行模式
    1)插入模式:在此模式下可以输入字符,按ESC将回到命令模式。
    2)命令模式:可以移动光标、删除字符等。
    3)低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。

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

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

    移动光标类命令h :光标左移一个字符l :光标右移一个字符space:光标右移一个字符Backspace:光标左移一个字符k或Ctrl+p:光标上移一行j或Ctrl+n :光标下移一行Enter :光标下移一行w或W :光标右移一个字至字首b或B :光标左移一个字至字首e或E :光标右移一个字至字尾) :光标移至句尾( :光标移至句首}:光标移至段落开头{:光标移至段落结尾nG:光标移至第n行首n+:光标下移n行n-:光标上移n行n$:光标移至第n行尾H :光标移至屏幕顶行M :光标移至屏幕中间行L :光标移至屏幕最后行0:(注意是数字零)光标移至当前行首$:光标移至当前行尾
    n+ //向下跳n行n- //向上跳n行nG //跳到行号为n的行G //跳至文件的底部

    屏幕翻滚类命令Ctrl+u:向文件首翻半屏Ctrl+d:向文件尾翻半屏Ctrl+f:向文件尾翻一屏Ctrl+b;向文件首翻一屏nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

    插入文本类命令i :在光标前I :在当前行首a:光标后A:在当前行尾o:在当前行之下新开一行O:在当前行之上新开一行r:替换当前字符R:替换当前字符及其后的字符,直至按ESC键s:从当前光标位置处开始,以输入的文本替代指定数目的字符S:删除指定数目的行,并以所输入文本代替之ncw或nCW:修改指定数目的字nCC:修改指定数目的行

    复制、粘贴
    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

    简单替换表达式 :%s/four/4/g“%” 范围前缀表示在所有行中执行替换,最后的 “g” 标记表示替换行中的所有匹配点,如果仅仅对当前行进行操作,那么只要去掉%即可
    如果你有一个像 “thirtyfour” 这样的单词,上面的命令会出错。这种情况下,这个单词会被替换成”thirty4″。要解决这个问题,用 “<”来指定匹配单词开头:
    :%s/<four/4/g显然,这样在处理 “fourty” 的时候还是会出错。用 “>” 来解决这个问题: :%s/<four>/4/g如果你在编码,你可能只想替换注释中的 “four”,而保留代码中的。由于这很难指定,可以在替换命令中加一个 “c” 标记,这样,Vim 会在每次替换前提示你: :%s/<four>/4/gc
    单词精确匹配替换
    sed -e "s/<old>/new/g" file

    删除命令ndw或ndW:删除光标处开始及其后的n-1个字do:删至行首d$:删至行尾ndd:删除当前行及其后n-1行x或X:删除一个字符,x删除光标后的,而X删除光标前的Ctrl+u:删除输入方式下所输入的文本
    x //删除当前字符nx //删除从光标开始的n个字符dd //删除当前行ndd //向下删除当前行在内的n行u //撤销上一步操作U //撤销对当前行的所有操作

    搜索及替换命令/pattern:从光标开始处向文件尾搜索pattern?pattern:从光标开始处向文件首搜索patternn:在同一方向重复上一次搜索命令N:在反方向上重复上一次搜索命令:s/p1/p2/g:将当前行中所有p1均用p2替代:n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代:g/p1/s//p2/g:将文件中所有p1均用p2替换

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

    最后行方式命令:n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下:n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下:n1,n2 d :将n1行到n2行之间的内容删除:w :保存当前文件:e filename:打开文件filename进行编辑:x:保存当前文件并退出:q:退出vi:q!:不保存文件并退出vi:!command:执行shell命令command:n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入:r!command:将命令command的输出结果放到当前行

    寄存器操作“?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字“?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字“?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字“?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。


    部分内容转自以下blog

    相关文章

      网友评论

          本文标题:VIM操作

          本文链接:https://www.haomeiwen.com/subject/vamahxtx.html