linux汇总整理-vi篇

VI的几点记忆技巧

  • 在vi模式下," " 代表的是结尾,而 " 0 " 代表的是开头。例如: ‘ 0 ‘ :光标移至当前行首 ‘ "代表的是结尾,而"0"代表的是开头。例如: `0`:光标移至当前行首 ` "代表的是结尾,而"0"代表的是开头。例如:‘0‘:光标移至当前行首:光标移至当前行尾 d0:删除至开头; d$`:删除至结尾
  • 在vi模式下,小括号是句,大括号是段。例如:
    (:光标移至句子开头
    ):光标移至句子结尾
    {:光标移至段落开头
    }:光标移至段落结尾
  • 在vi模式下,b、e、w均代表的是单词。例如:
    w:光标移动到下一个单词的开头(word)
    e:光标移动到下一个单词的结尾(end)
    b:光标移动到上一个单词(back)
    dw:删除下一个单词
    de:删除下一个单词
    db:删除上一个单词
  • 在vi模式下,按下d之后代表启动了删除操作,此时配合移动光标命令可以实现各种删除操作。例如:
    d(:从光标删除到句首
    d):从光标删除到句尾
    d{:从光标删除到段首
    d}:从光标删除到段尾
    dw:删除下一个单词
    db:删除上一个单词
    dl:删除光标右边一个字符(相当于windows下按了delete键)
    dh:删除光标左边一个字符
    dk:删除本行以及上边一行(共删除两行)
    dj:删除本行以及下边一行(共删除一行)
    dd:删除当前行

Vim语

动词:动词代表了我们打算对文本进行什么样的操作。

d 表示删除 delete
r 表示替换 replace
c 表示修改 change
y 表示复制 yank
v 表示选取 visual select

名词:名词代表了我们即将处理的文本。Vim 中有一个专门的术语叫做文本对象,下面是一些文本对象的示例:

w 表示一个单词 word
s 表示一个句子 sentence
p 表示一个段落 paragraph
t 表示一个 HTML标签 tag
引号或者各种括号所包含的文本称作一个文本块。

介词:介词界定了待编辑文本的范围或者位置。例如:

i 表示“在…之内” inside
a 表示“环绕…” around
t 表示“到…位置前” to
f 表示“到…位置上” forward
下面是几个有关范围的示意图,你们感受一下:

数词:数词指定了待编辑文本对象的数量,从这个角度而言,数词也可以看作是一种介词。
组词为句:有了这些基本的语言元素,就可以着手构造一些简单的命令了。
  • 动词 介词 名词
    dip-delete inside paragraph:删除一个段落
    vis-visual select inside sentence:选取一个句子
    ciw-change inside word:修改一个单词
    caw-change around word:修改一个单词
    dtx-delete to x:删除文本直到字符“x”(不包括字符“x”)
    dfx-delete forward x:删除文本直到字符“x”(包括字符“x”)
  • 动词 介词/数词 名词
    c3w- change three words: 修改三个单词
    d2w- delete two words : 删除两个单词
  • 数词 动词 名词— 数词修饰动词,表示将操作执行 n 次
    2dw- twice delete word : 两次删除单词(等价于删除两个单词)
    3x-three times delete character: 三次删除字符(等价于删除三个字符)

vi命令

  • 进入vi的命令
    vi filename :打开或新建文件,并将光标置于第一行首
    vi +n filename :打开文件,并将光标置于第n行首
    vi + filename :打开文件,并将光标置于最后一行首
    vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
    vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename
    vi filename…filename :打开多个文件,依次进行编辑
  • 移动光标类命令
    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:(注意是数字零)光标移至当前行首
    $:光标移至当前行尾
  • 屏幕翻滚类命令
    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:修改指定数目的行
  • 删除命令
    ndw或ndW:删除光标处开始及其后的n-1个字
    d0:删至行首
    d$:删至行尾
    ndd:删除当前行及其后n-1行
    x或X:删除一个字符,x删除光标后的,而X删除光标前的
    Ctrl+u:删除输入方式下所输入的文本
  • 搜索及替换命令
    /pattern:从光标开始处向文件尾搜索pattern
    ?pattern:从光标开始处向文件首搜索pattern
    n:在同一方向重复上一次搜索命令
    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号删除寄存器中。

vi命令

  • 插入动作
    a:在光标后插入文本
    A:在当前行插入文本
    i:在光标前插入文本
    I:在当前行前插入文本
    o:在当前行的下边插入新行
    O:在当前行的上边插入新行
    s:删除光标所在处字符,并进入插入模式
    S:删除光标所在的行,并进入插入模式

  • 光标移动命令
    H:移动到视窗的第一列
    M:移动到视窗的中间列
    L:移动到视窗的最后列
    gg:跳到文件头
    G:移动到文件最后列
    nG:直接用数字n加上大写G移动到第n行(等同于命令“:n”)
    w:向前移动一个word
    nw:向前移动n个word

  • 删除操作命令
    x:删除光标所在的字符【delete】
    dw:删除光标所在的单词
    d$:删除光标至行尾的所有字符
    dd:删除当前行
    ndd:删除当前n行
    dG:删除当前行到最后一行

  • 拷贝与粘贴命令
    yw:将光标所在单词拷入剪贴板
    y$:将光标至行尾的字符拷入剪贴板
    yy:将当前行拷入剪贴板
    nyy:将当前n行拷入剪贴板
    p:将剪贴板中的内容粘贴在光标后
    P:将剪贴板中的内容粘贴在光标前

  • 查找与替换
    /string:往前搜索string
    n:查找下一个
    ?string:往后搜索string
    :%s/string/string/g:替换

  • 文件编辑、保存及退出vi命令
    :q:不保存退出
    :q!:不保存强制性退出
    :w:保存编辑
    :wfilename:存入文件filename中
    :w!filename:强制性存入文件filename中
    :wq/:x/ZZ:保存退出
    :wq!:强制保存然后退出

  • 快速对引号或括号等标点内的内容进行选中、删除、复制操作的超级技巧
    ci'、ci"、ci(、ci[、ci{、ci<:分别更改这些配对标点符号中的文本内容
    di'、di"、di(或dib、di[、di{或diB、di<:分别删除这些配对标点符号中的文本内容
    yi'、yi"、yi(、yi[、yi{、yi<:分别复制这些配对标点符号中的文本内容
    vi'、vi"、vi(、vi[、vi{、vi<:分别选中这些配对标点符号中的文本内容

  • vi小技巧
    在命令模式下按“.”键可以重复上一个操作。

  • 快速跳转到第100行:100G(按完100后,按大写的G)

  • 写程序时,修改代码前需要将原先的注释掉以备份:
    4yy:将光标所在位置开始共4行拷贝到linux的剪贴板
    p:复制到光标所在行的下边
    P:粘贴到光标所在行的上边

  • 在以普通用户打开的vim当中保存一个root用户文件
    :w !sudo tee %
    这题目读起来纠结,其实是很常见的,常常忘记了sudo就直接用vim编辑/etc内的文件,等编辑好了,保存时候才发现没权限。
    曲线方法是先保存个临时文件,退出后再sudo cp回去。不过实际上在vim里面可以直接完成这个过程的,命令就是如此。
    查阅vim的文档(输入:help :w),会提到命令:w!{cmd},让vim执行一个外部命令{cmd},然后把当前缓冲区的内容从stdin传入。
    tee是一个把stdin保存到文件的小工具。
    而%,是vim当中一个只读寄存器的名字,总保存着当前编辑文件的文件路径。
    所以执行这个命令,就相当于从vim外部修改了当前编辑的文件,好完工。

其他小知识点

1、vi是visual edit的缩写
2、vi强制退出:在末尾加上“!”。
3、必须记住的几个命令
    移动光标:
    屏幕翻滚:
          ctrl+u:向上翻半屏(up)
          ctrl+d:向下翻半屏(down)
          ctrl+ f:向上翻一屏(forward)
          ctrl+b:向下翻一屏(backward)
    插入文本:
          i:光标所在位置开始插入
    删除命令:
    搜索及替换命令:
          \:转义字符
          /:从光标开始处向下查找
          ?:从光标开始出向上查找
          n:在同一方向上重复上次搜索的命令
          N:在相反方向上重复上次搜索的命令
          注意:替换命令中,s代表singnal,g代表global
          :s/p1/p2/g:将当前行中所有p1均用p2替代
          :n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代
          :g/p1/s//p2/g:将文件中所有p1均用p2替换
  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值