vi常用命令

    技术2024-12-18  13

    <!-- @page { margin: 2cm } P { margin-bottom: 0.21cm } -->

    vim(vi)Linux 中功能强大的编辑工具。vim3 中主要的模式:

     1.normal mode :当进入vim 时,默认的模式就是normal mode 。在此模式下,无法输入任何文字,不过可以利用按键命令来执行许多操作命令,例如移动光标位置、复制、删除。

     2.insert mode :进入vim 输入ai 、或o 键。即可进入insert mode ,此模式下可以输入文字内容。

     3.command-line mode :在norma lmode 中输入“:” 即会进入command-line mode ,在此模式下,可以做一些与输入文字无关的事,例如搜索字符串、保存文件或结束编辑等。

    normal mode 下:

    h :将光标向左移动一格

    l :将光标向右移动一格

    j :将光标向下移动一格

    k :将光标向上移动一格

    w : 以单词为单位向右移动光标,支持计数,如3w,向右移动3个单词

    b  向左移动一个单词,把符号或标点当作单词处理,如3b,向前移动3个单词

    H :跳转到本屏幕的开始

    M: 跳转到本屏幕的中间

    L: 跳转到本屏幕的结尾

    ctrl+b :将页面向前卷动一页

    ctrl+f :将页面向后卷动一页

    0 :将光标移到该行最前面

    $ :将光标移到该行的最后面

    G :将光标移到最后一行的开头

    .  :重复上一次操作 * :向下搜索光标所在词。 # :向上搜索光标所在词。

    wW :将光标移到下一个字

    若输入“w” ,则标点符号如“.” ,“,” ,“/” 等字符都被当成一个字

    eE :将光标移到本单字的最后一个字符;如果光标所在位置为本单字的最后一个字符,则跳到下一个单字的最后一个字符。

    若输入“w” ,则标点符号如“.” ,“,” ,“/” 等字符都被当成一个字

    b :将光标移到本单词的第一个字符;如果光标所在位置为本单词的第一个字符,则跳到上一个单字的第一个字符。

    ctrl+u :将光标向前移动半页

    ctrl+d :将光标向右移动半页

    ctrl+e :屏幕向下卷动一行,也可以说文章和光标向上卷动一行

    ctrl+y :屏幕向上卷动一行,也可以说文章和光标向下卷动一行

     

    command-line mode 下:

    文件的路径及名称:打开指定文件

    a :从当前光标所在的位置的下一个字符开始输入

    i :在光标所在的位置插入新输入的字符

    o :新增加的一行,并将光标移到下一行的开头

    w :文件的路径及名称 保存文件

    q :退出vim

    Vim的常用操作命令

    vi中替换命令

    1. 基本的替换

    :s/vivian/sky/ 替换当前行第一个 vivian 为 sky

    :s/vivian/sky/g 替换当前行所有 vivian 为 sky

    :n,$s/vivian/sky/ 替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

    :n,$s/vivian/sky/g 替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

    (n 为数字,若 n 为 .,表示从当前行开始到最后一行)

    :%s/vivian/sky/(等同于 :g/vivian/s//sky/)替换每一行的第一个 vivian 为 sky

    :%s/vivian/sky/g(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

    2. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符

    :s#vivian/#sky/# 替换当前行第一个 vivian/ 为 sky/

    :%s+/oradata/apras/+/user01/apras1+ (使用+ 来 替换 / ): /oradata/apras/替换成/user01/apras1/

    3. 删除文本中的^M

    问题描述:对于换行,window下用回车换行(0A0D)来表示,linux下是回车(0A)来表示。这样,将window上的文件拷到unix上用时,总会有个^M,请写个用在unix下的过滤windows文件的换行符(0D)的shell或c程序。

    使用命令:cat filename1 | tr -d “^V^M” > newfile;

    使用命令:sed -e “s/^V^M//” filename > outputfilename

    需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。

    在vi中处理:首先使用vi打开文件,然后按ESC键,接着输入命令:

    :%s/^V^M// :%s/^M$//g

    如果上述方法无用,则正确的解决办法是:

    tr -d “\r” < src >dest

    tr -d “\015〃 dest

    strings A>B

    4. 其它用法

    利用 :s 命令可以实现字符串的替换。具体的用法包括:

    :s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1

    :s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1

    :.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1

    :1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1

    :g/str1/s//str2/g 功能同上

    从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。

     

    复制文字

    yy :可将光标目前所在位置的正行复制,复制时不会将文字反白显示

    nyy :其中n 为数字键,表示要复制的行数,若按3yy ,则连同光标所在的位置的一行,与下面2 行一起复制

    yw :可复制光标所在位置到整个单词结束的字符

    nywn 表示要复制的单词数目,若按3yw ,则会将目前光标所在位置到单词结束,以及后面的2 个字一起复制

    y$ :从光标当前位置复制到行尾。

    y0 :从光标当前位置复制到行首。

    yG  复制光标以下的所有行

    p :可将复制的文字粘贴到当前光标所在的位置。若复制的是整行文字,则会将整行内容粘贴在光标所在位置的下一行

     

    删除文字

    d :先按d 键,放开后按←键,可将光标位置前一个字符删除;按→键,则会将光标位置的字符删除;按↑键,可将当前光标所在的行与前一行一并删除。按↓键,可将当前的光标所在的行与下一行删除。

    D :可删除一行中光标所在位置之后的所有字符。

    dd :连续按2d 键可删除光标所在的那一行。

    dw :将光标停在某个字的第一个字符,按dw 键时,会将此字整个删除。如将光标置在某个字中间的字符上,则会将此字中光标后面的字符删除。

    ndn 为数字,如按3d ,再按下↑键,则删除光标上方的3 行,再包括本身1 行,共删除4 行。若按下↓键,则删除光标下方3 行再包括本身1 行,共4 行。

    ndd :若按3dd 键,表示删除当前光标位置的1 行和下面的2 行。

    x :删除光标所在位置的字符

    X :删除光标所在位置的前一个字符,与d+← 键一样

    nx :按4x 键,表示删除光标位置后的3 个字符和光标本身所在的字符

    nX :按4X 键,表示删除光标位置之前的4 个字符(不包括光标的字符)

    查找及替换文字

    / 或?:当要搜索文章中的某一个字符串时,可输入“/” 或“?” ,然后在输入要查找的字符串。例如输入“/kuka” ,然后按回车键,vim 就会把所有的kuka字符串标记起来,并自动将光标移到第一个找到的字符串上。

    n :将光标移到下一个找到的字符串上

    N :将光标移到上一个找到的字符串上

    r :替换光标所在的位置的字符。修改内容不一定要进入insert mode ,在normal mode 中,只要将光标移到要更改的字符上,然后按R 键,就可以输入要查找的字符了。

    R :连续替换光标所在的位置的字符,按Esc 键停止替换

    cc :按cc 键可以替换光标所在的那一行

    替换字符串:当要将文章中的某一个字符串全部替换时(例如将所有的temp 替换成tmp ),使用“:g/temp/s//tmp/g” 或“:1,$stemp/tmp/g” 命令,可立刻将所有的“temp” 替换成“tmp” 字符串。如果不是所有的“temp” 字符串都要替换时,可用“:g/temp/s//tmp/gc” 或“:1/,$stemp/tmp/gc” 命令。则找到每一个“temp” 字符串时,都会将整行显示在屏幕的下方,可输入“y” 或“n” 决定是否要替换。

    显示光标所在的行数、移到指定的行数

    ^g^G :按次组合键,则会在最下方处显示光标所造位置的行数,以及文章的总行数。

    nGn 为数字,若按下20G ,则可将光标移到第20 行。

    还原

    u :按此键就是在执行undo 命令,可取消前一次的操作

    ^r :按此键就是执行redo 命令,可以恢复刚才undo 的操作

     

    多行同右左移动

    :12,14 》 //右移    :12,16《 //左移

     

    操作多列

     

    ctr+v -> 选择要操作的多咧 -> 执行要做的操作->esc

    :set nu 设置行号 :set nonu 取消行号显示

    vim + ctags 阅读源代码 首先我们必需给要阅读的源代码建一个或者多个tags 文件,在shell 下利用ctags 命令给单个文件建立tags 如下:      ctags filename.c 要给同一个目录下的所有文件建立tags如下:      ctags -R 这时在tags文件所在的目录下打开源文件阅读,vim就会自动调用tags文件。 如果tags文件不在当前目录下,可以在命令模式下用下面的命令设置tag文件      :set tag=tag_file_path

    要在vim下跳到一个函数的定义处可以在命令模式下用下面的命令:      :tag fuction_name 这个命令将把你带到fuction_name函数的定义处。 另外,ctrl + ]命令会把当前光标下的单词作为tag的名字,并直接跳转。当找不到所选的tag时,输入命令":tselect" ctrl + t命令可以回到前一个tag,你可以在ctrl + t前面加一个数字 表示往回跳的层数。 使用Ctrl + g可以显示当前正在编辑的文件名,及所在的行号 另外,如果源文件的排版比较乱的话,可以通过命令 gg=G 来格式化整个源文件。 下面这几个设置可以帮助你更好的设置代码缩进       :set cindent       :set shiftwidth=4       :set tabstop=4

     

    taglist常用命令

     

    安装:

    先要安装ctags:yum install ctags

    到Vim主页(http://www.vim.org/scripts/script.php?script_id=273)下载taglist,下载是一个zip包;然后打开home目录,建立新文件夹“.vim”,已经存在就不用建了;把解压后的“tagslist_45”文件夹里的文件(不是整个“tagslist_45”文件夹)移动到“.vim”目录去。

    常用指令如下: 1.切换函数列表的开、关

    :TlistToggle。   或   :Tlist

     

    2.在正常编辑区域和tags区域中切换 ctrl+w+w。 3.定位指定内容   在tags区域中,把光标移动到变量、函数名称上,然后敲回车,就会自动在正常编辑区域中定位到指定内容了,很方便的。 4. 查找相关函数或变量 :ts param

     

    5. 显示帮组信息

    :help talist.txt

     

    6.其他命令

    u 更新taglist窗口中的tag s 更改排序方式,在按名字排序和按出现顺序排序间切换 x taglist窗口放大和缩小,方便查看较长的tag + 打开一个折叠,同zo - 将tag折叠起来,同zc * 打开所有的折叠,同zR = 将所有tag折叠起来,同zM [[ 跳到前一个文件 ]] 跳到后一个文件 q 关闭taglist窗口

     

    VIM使用cscope查找

    首先在目录下建立cscope索引文件

    find -name '*.c' > cscope.file

    cscope -Rbkq

    这个命令会生成三个文件:cscope.out, cscope.in.out, cscope.po.out。 其中cscope.out是基本的符号索引,后两个文件是使用"-q"选项生成的,可以加快cscope的索引速度。 上面所用到的命令参数,含义如下:

    -R: 在生成索引文件时,搜索子目录树中的代码 -b: 只生成索引文件,不进入cscope的界面 -k: 在生成索引文件时,不搜索/usr/include目录 -q: 生成cscope.in.out和cscope.po.out文件,加快cscope的索引速度

     

    如果要关联其他类型的文件(如 .cpp、.java等),就需要我们自己先生成一个 cscope.files,把所有我们希望关联进去的文件都列在里面: $ find /home/edelweiss/nbd/nbd-2.9.15/ -name '*.c' -o -name '*.cpp' -o -name '*.h' / > /home/edelweiss/cscope.files 注意查找的路径一定要写成绝对路径,这样才能保证写入到 cscope.files 文件中的也是绝对路径。 之后就可以根据 cscope.files 建立数据库了: $ cscope -bq -i /home/edelweiss/cscope.files

     

    :cs add cscope.out

    :cs help

    cscope commands:

    add  : Add a new database             (Usage: add file|dir [pre-path] [flags])

    find : Query for a pattern            (Usage: find c|d|e|f|g|i|s|t name)

           c: Find functions calling this function

           d: Find functions called by this function

           e: Find this egrep pattern

           f: Find this file

           g: Find this definition

           i: Find files #including this file

           s: Find this C symbol

           t: Find assignments to

    help : Show this message              (Usage: help)

    kill : Kill a connection              (Usage: kill #)

    reset: Reinit all connections         (Usage: reset)

    show : Show connections               (Usage: show)

     

    s:查找C语言符号,即查找函数名、宏、枚举值等出现的地方 g:查找函数、宏、枚举等定义的位置,类似ctags所提供的功能 d:查找本函数调用的函数 c:查找调用本函数的函数 t:查找指定的字符串 e:查找egrep模式,相当于egrep功能,但查找速度快多了 f:查找并打开文件,类似vim的find功能 i:查找包含本文件的文

    :cs find g do_fork

    就可以查看do_fork的全局定义了。

    cscope常用快捷键:

    先按 ctrl+/ 然后 再按以下键:  

    1.                   c: 查找该函数被调用的位置   

    2.                   d: 查找该函数调用了哪些函数   

     

    3.                   e: 查找指定的正规表达式 f: 查找指定的文件   

    4.                   g: 查找指定标识符的定义位置   

    5.                   i: 查找该文件在哪些地方被包含   

    6.                   s: 查找指定标识符的使用位置   

    7.                 t: 查找指定的文本字符串  

     

     

     

     

     

     

    最新回复(0)