zoukankan      html  css  js  c++  java
  • 菜鸟vimer成长记——第2.3章、insert模式

    大部分的Vim 命令都在非插入模式中执行,不过有些功能在插入模式中会更好实现些。

    如果没有输入当前文件不存在的新文本的需求时,建议通过其他模式来操作完成。

    目的

      掌握inser模式下常用操作的语法和概念

    光标移动

      移动光标的位置,这些操作和其他的编辑器基本一致。列几个常用的,其他的不一一列举。

      常用语法:

    操作用途
    Ctrl+Left 向后移动一个单词
    Ctrl+Right 向前移动一个单词
    Home 移动到行首
    End 移动到行尾
    Ctrl+Home 移动到文件第一行
    Ctrl+End 移动到文件最后一行
    PageUp 向上一屏
    PageDown 向下一屏

      详情查看:h ins-special-special

    更正错误

      在输入的时候,难免会输错。怎么更快速的更正这些错误呢?

    情景一:在输入时打错
        我们可以用退格键删除错误的文本,然后再输入正确的内容。如果出错的地方靠近单词结尾,这或许是最快的修正方式。
    
    情景二:出错的位置在单词开头
        专业打字员会建议先删除整个单词,然后再重新输入一遍。如果你能以每分钟超过60 个单词的速度输入,那么重新输入一个词只需要1 秒钟的时间。即便你打不了这么快,最好也采用这种方式。我以前总是输错某些特定的词,但自从采纳这一建议后,我就更清楚地意识到哪些词会让我犯错,因此现在犯的错也少了很多。
        另外,你也可以切换到普通模式,然后跳到这个词的开头并更正错误,再按 A 返回刚才的位置。不过完成这一套动作要花的时间可能不止1 秒钟,并且它也无助于提高你的盲打技巧。虽然说我们可以切换模式,不过这并不意味着一定就得切换。

      所以删除错误并且重新输入是最佳方法。

      删除时有如下对应的快捷键操作:

    操作用途
    Ctrl+h 删除前一个字符(同退格键)
    Del 删除后一个字符。很少用
    Ctrl+W 删除前一个单词
    Ctrl+U 删除到行首

       注意事项:

    • 这几个删除在shell以及cmd-line一样可以使用。

    插入现有文本

      如果是当前没有的文本,通过键盘录入即可插入到当前光标。如果是是当前现有的文本到,可以通过多种途径插入当前光标。

      这些途径如下:

    上下行

      复制光标处在位置的上下行字符。每次操作一次复制一个字符。

      

      语法:

    操作用途
    Ctrl+E 复制下一行光标位置的字符到当前光标
    Ctrl+Y 复制上一行光标位置的字符到当前光标

    上一次

      复制上一次进入insert模式插入的内容。

      语法:

    操作用途
    Ctrl+A 复制上一次进入insert模式插入的内容。
    Ctrl+o 复制上一次进入insert模式插入的内容,并且退到normal模式

    寄存器

      复制寄存器里的内容。

      语法:CTRL-R {0-9a-z"%#*+:.-=}

      注意事项:

    • 查看所有寄存器的方法:reg
    • 在normal模式中使用put {0-9a-z"%#*+:.-=},可以实现黏贴。

      在本文顺便介绍一下寄存器的类型。请注意:下面寄存器的名称开头都会多加一个"(双引号)。详细查看:h registers

    无名(unnamed)寄存器

      "",缓存最后一次操作内容;

    数字(numbered)寄存器

      "0 ~ "9,缓存最近操作内容,复制与删除有别。

    • "0寄存器缓存最近一次复制的内容。
    • "1-"9缓存最近9次行删除内容

    行内删除(small delete)寄存器

      "-,缓存行内删除内容

    具名(named)寄存器

      "a ~ "z或"A - "0Z,指定时可用;

      定义一个具名寄存器的语法:在normal模式下"{name}y{motion}。这个输入可以注意右下角,会有对应的输入提示。

    只读(read-only)寄存器

    寄存器代表的内容
    ": 最近cmd-line模式执行的命令
    ". 上次进入插入模式插入的文本
    "% 当前文件名
    "# 上一个轮换文件名。

    表达式(expression)寄存器

      "=,只读,用于执行表达式命令;

      例如:

    #假设我们刚输入完下列内容,我们想算一下总价然后再输入
    6 chairs, each costing $35, totals $
    #只要输入<C-r>=6*35<CR>就可以得到结果

    选择及拖拽(selection and drop)寄存器

      "*, "+, "~,存取GUI选择文本,可用于与外部应用交互,使用前提为系统剪切板(clipboard)可用;

      其他的命令只在vim里才有效。

    黑洞(black hole)寄存器

      "_,不缓存操作内容(干净删除);

      删除文本却不想覆盖无名寄存器中的内容时,此命令很管用。

    模式寄存器(last search pattern)

      "/,缓存最近的搜索模式。

    自动提示

      语法:

    命令补全类型
    <C-n> 普通关键字
    <C-x><C-n> 当前缓冲区关键字
    <C-x><C-i> 包含文件关键字
    <C-x><C-]> 标签文件关键字。??这个暂时放到后面,可能单开一个文章来说明。
    <C-x><C-k> 字典查找
    <C-x><C-l> 整行补全
    <C-x><C-f> 文件名补全
    <C-x><C-o> 全能(Omni)补全
    <C-x><C-s> 拼写建议
    <C-x><C-v> vim命令
    <C-x><C-d> 补全宏。??这个暂时没有找到对应的使用方式

      不论使用哪种自动补全命令,都会弹出式菜单。

      可供弹出式菜单使用的命令:

    按键操作作用
    <C-n> 使用来自补全列表的下一个匹配项(next 匹配项
    <C-p> 使用来自补全列表的上一个匹配项(previous 匹配项)
    <Down> 选择来自补全列表的下一个匹配项
    <Up> 选择来自补全列表的上一个匹配项
    <C-y> 确认使用当前选中的匹配项(yes)
    <C-e> 还原最早输入的文本(从自动补全中exit)
    <C-h> (与<BS>) 从当前匹配项中删除一个字符
    <C-l> 从当前匹配项中增加一个字符
    {char} 中止自动补全并插入字符{char}

      还有一些使用技术如下

    使用字典中的单词进行自动补全

      这个其实就是<C-X><C-K>

      有时候,我们可能想通过自动补全功能输入某个单词,但它并没有在任何打开的缓冲区、包含文件或者标签文件中出现过。在这种情况下,可以在字典中进行查找。

      为了激活该功能,我们需要为Vim 提供一份合适的单词列表。最简单的方法就是通过运行:set spell 来激活Vim 的拼写检查功能。

      如果你不想激活拼写检查功能,也可以通过 ‘dictionary’ 选项来指定一个或多个含有单词列表的文件(参见:h 'dictionary' )。

      当你想输入一个长单词或者很难拼写的单词时,字典自动补全也许最管用了。这里有一个例子

      

    自动补全文件名

      这个其实就是<C-X><C-F>

      Vim 总是维护着一个当前工作目录,这一做法与shell 类似。在任何给定的时间点,我们都可以通过:pwd 命令(print working directory)获取到该信息,还可以通过:cd{path} 命令(change directory)随时切换工作目录。另外,Vim 的文件名自动补全功能只相对于工作目录的路径进行扩展,而不是相对于当前编辑文件的路径,理解这一点很重要。

      如果补全的是非当前工作目录的文件,我们的操作有两种方式:

      1、写路径的根目录,然后不断的通过<C-X><C-F>来选择补全文件名。其实我比较喜欢这种方式

      2、先通过:cd{path}切换目录,然后<C-X><C-F>补全,然后通过:cd - 切回原来的目录。

    根据上下文自动补全

      这个其实就是<C-X><C-O>

      全能补全是,它将提供一份为光标所处的上下文量身定做的补全建议列表.

      

      实际上,该功能由专用的文件类型插件实现,因此,我们必须先加载以下配置行:

    set nocompatible
    filetype plugin on

      Vim 的发行版本身就支持十几种语言,包括HTML、CSS、JavaScript、PHP 以及SQL。你可以通过:h compl-omni-filetypes 找到完整的列表

    减少按键次数

      只要和其他的快捷操作没有冲突都可以把两个操作变为一个。

      建议设置如下:

      

    缩进

      语法:

    操作用途
    Ctrl+T 插入一个缩进
    Ctrl+D 删除一个缩进
    0(数字零)+Ctrl+D 删除当前行的所有缩进
    ^+Ctrl+D 删除当前行的所有缩进。和上面的区别暂时还没试出来??

    缩写

      缩写可以用于insert和cmd-line模式。这些命令都差不多,只是通过前缀区别。单一个字符是i的表示适合于insert模式。如果是c的表示适合于cmd-line模式。如果没写的,表示两个都可以使用。

      下面仅列出都适用的列表,其他的大家对号入座

      其中{lhs}表示缩写的字符串。{rhs}表示真实的字符串,这里面支持map-<expr>,map-<buffer>

    操作用途
    :ab {lhs} 查看缩写的列表。如果不写就是所有缩写列表;如果有写就是找到匹配的列表
    :ab  {lhs} {rhs} 定义一个缩写
    :una {lhs} 删除缩写列表。如果不写就是删除所有列表;如果有写就是删除匹配的列表

      使用缩写例子

    #定义了一个:ab syso System.out.println();
    
    #列举insert模式例子,cmd-line模式是一样的。${CURSOR}代表光标位置
    
    #能生效的缩写。
    "  syso{CURSOR}"     #注意,syso的前面有空白文本
    #此时只要继续按一下非关键字符(tab键|空格键|Enter键|Esc键等)
    
    #不能生效的缩写
    " sysob{CURSOR}"
    "testsyso{CURSOR}"

      所以,使用缩写的方法是:缩写必须是一个完整的独立的{rhs}输入。在{rhs}输入之前,前面需要有空白文本。在{rhs}输入之后不能再有任何其他的关键字符输入。

      还有一些其他的,可以细看:h Abbreviations :h map-<expr>,:h map-<buffer>

    小技巧

      如果是通过cmd-line设置的缩写,关闭vim后就消除了。为了可以一直使用,可以写一个常用的缩写列表文件,然后放在vimrc文件中

    #vimrc文件
    source $VIMRUNTIME/my/ab.vim

    insert normal 模式

      它能让我们执行一次普遍模式命令。在此模式中,我们可以执行一个普通模式命令,执行完后,马上就又返回到插入模式。

      语法:

      Ctrl+o

      例如: 

    场景:在当前行正好处于窗口顶部或底部时,有时我会滚动一下屏幕,以便看到更多的上下文。
      用zz 命令可以重绘屏幕,并把当前行显示在窗口正中,这样就能够阅读当前行之上及之下的半屏内容。我常常会键入
    <C-o>zz,在插入-普通模式中触发这条命令。此操作完成后就会直接回到插入模式,因此我可以不受中断地继续打字。
    【【【版权所有,转载请注明原文链接。】】】 文中有不妥或者错误的地方还望指出,以免误人子弟。如果觉得本文对你有所帮助不妨【推荐】一下!如果你有更好的建议,可以给我留言讨论,共同进步! 再次感谢您耐心的读完本篇文章。 【【【我们所浪费的今天,是昨天死去的人奢望的明天;我们所厌恶的现在,是未来的自己回不去的曾经】】】
  • 相关阅读:
    Linux (x86) Exploit 开发系列教程之三(Off-By-One 漏洞 (基于栈))
    Linux (x86) Exploit 开发系列教程之二(整数溢出)
    Linux (x86) Exploit 开发系列教程之一(典型的基于堆栈的缓冲区溢出)
    Linux (x86) Exploit 开发系列教程之四(使用return-to-libc绕过NX bit)
    xss level11
    f.select
    jquery.backstretch
    linux目录或文件权限
    pradino 命令
    Padrino 博客开发示例
  • 原文地址:https://www.cnblogs.com/ansn001/p/4685307.html
Copyright © 2011-2022 走看看