关于Vim

作者: 饥人谷_Dylan | 来源:发表于2017-02-06 19:36 被阅读0次

    为什么选择Vim?

    1. vim无所不在。学习vim无需担心到了其他平台需要学习新编辑器。
    2. 可扩展性。可以只用它来编辑配置文件,也可以将它当做开发平台。
    3. 功能强大.

    Vim即语言?

    动词

    所谓动词指的是我们执行的动作,这些动作可以施加在名词之上。可以看看下面几个常见的动作:

    • d: 删除
    • c: 修改
    • y: 拖拉(拷贝)
    • v: 可视化选择 (V for line vs. character)
    修饰语

    定语用在名词之前,表明以哪种方式来执行动作。几个例子:
    i: 内部
    a: 周围
    NUM: 数字 (e.g.: 1, 2, 10)
    t: 查找到指定字符,并跳转到这个字符的前面
    f: 查找到指定字符,并跳转到字符所处的位置
    /: 查找字符串 (literal or regex)

    名词

    在英语中,名词用来表示你所操作的对象。它们都是客体。在vim中也是这样。下面列出vim中的名词:

    • w: 单词
    • s: 句子
    • ): 句子 (另一种操作方式)
    • p: 段落
    • }: 段落 (另一种操作方式)
    • t: 标签 ( HTML/XML)
    • b: 块 (编程语言)
      Nouns as motion
      同样,你也可以将名词视为移动动作,这意味着你可以用名词表示在文本的跳转范围。我们可以在“移动”章节中看到例子说明。

    对于下面这些符号,根据颜色的不同来区分句子的不同组成部分:

    • 删除两个单词
      d2w

    • 修改所在的句子(删除当前句子并进入插入模式)
      cis

    • 拷贝当前所在的段落
      yip

    • 修改当前光标所在位置到下一个括号之间的文本内容
      ct<
      记住,这里的“目标”是尖括号,除此之外还可以是任意字符。从语法上来说,使用单个字母”t”来表示这个向前查找的“目标”,这样我就可以使用“dt.”表示删除当前位置到下一个句号之间的内容,”yt;”表示拷贝当前位置到下一个分号之间的内容。

    —些对文件的基本操作

    • Vi file :使用vim打开要编辑的文件
    • :w :保存修改
    • :q! : 退出vim,后面加感叹号表示不保存修改强制退出
    • :wq: 保存修改并退出
    • :saveas ~/some/path/: 将文件保存到其他位置
      【注意:相比较:wq 我更喜欢使用ZZ,因为我觉得不需要输入冒号我觉得会快一点。也可以使用:x】
      ZZ: 同:wq

    搜索

    • /{string}: 搜索字符串
    • t : 跳转到某一字符前
    • F : 跳转到某一字符处
    • *:搜索当前光标位置单词的其他实例
    • n : 搜索完成后,跳转到下一个匹配实例
    • N :搜索完成后,跳转到上一条匹配实例
    • ; : 跳转到指定字符时,使用分号跳转到下一实例
    • , :跳转到指定字符时,使用逗号跳转到上一实例

    移动动作

    • j : 向下移动一行
    • k :向上移动一行
    • h :向左移动一个字符
    • l :向右移动一个字符
    行内移动

    你可以在当前行内自由的移动。

    • 0: 移动到行首
    • $: 移动到行末
    • ^: 移动到行首非空字符
    • t”: 跳转到下一个引号前
    • f”: 跳转到下一个引号处
      【注意: 逗号和分号会重复之前的t和f跳转】
    • n+ //向下跳n行
    • n- //向上跳n行
    • nG //跳到行号为n的行
    • G //跳至文件的底部
    按单词移动

    除了按行和字符移动外,还可以按单词移动:

    • w: 先前移动一个单词

    • b: 向后移动一个单词

    • e: 移动到当前单词末尾
      当使用大写字母时,vim会忽略掉单词间的分隔符,这样原本被分隔符隔开的多个单词会因此被视为一个大单词。

    • W: 向前移动一个大单词

    • B: 向后移动一个大单词
      这种大写命令的优势在我们实际工作中会频繁地碰到。

    按句子或段落移动
    • ):向前移动一条句子
    • }: 向前移动一个段落
    在屏幕间移动
    • H:向上移动一屏
    • M:移动到屏幕中间
    • L:移动到屏幕底端
    • gg: 移动到文件顶端
    • G:移动到文件结尾
    • ^U: 向上移动半屏
    • ^D: 向下移动半屏
    • ^F: 下一页
    • ^B: 上一页
    来回跳转

    在普通模式下,可以在两点间来回跳转,这在实际操作中非常有用。

    • Ctrl-i: 跳转到之前所在的位置
    • Ctrl-o: 跳回你实际的位置
    其他动作
    • :$line_numberH: 移动到指定行号
    • M: 移动到屏幕中间
    • L: 移动到屏幕底端
    • ^E: 向上滚动一行
    • ^Y: 向下滚动一行
    • ^U: 向上移动半屏
    • ^D: 向下移动半屏
    • ^F: 向下移动一页
    • ^B: 向上移动一页
      现在将所以移动动作总结到一起:

    移动命令总结

    j: move down one line
    k: move up one line
    h: move left one character
    l: move right one character
    0: move to the beginning of the line
    $: move to the end of the line
    w: move forward one word
    b: move back one word
    e: move to the end of your word
    ): move forward one sentence
    }: move forward one paragraph
    :line_number: move to a given line number
    H: move to the top of the screen
    M: move to the middle of the screen
    L: move to the bottom of the screen
    ^E: scroll up one line
    ^Y: scroll down one line
    gg: go to the top of the file
    G: go to the bottom of the file
    ^U: move up half a page
    ^D: move down half a page
    ^F: move down a page
    ^B: move up a page
    Ctrl-i: jump to your previous navigation location
    Ctrl-o: jump back to where you were

    基础修改/插入命令

    • i : 从当前光标位置之前插入
    • a : 从当前光标位置之后插入
    • I :从当前行开始位置插入
    • A :从当前行行末插入
    • o : 在当前行下新增一行,并从新行插入
    • O :在当前行上新增一行,并从新行插入
    • r : 替换当前光标所在字符
    • R :替换当前光标的字符,并一直向后替换(替换模式)
    • cm:修改文本,其中m表示移动的动作,比如,一个单词,一句或者一个段落。
    • C :修改当前所在行
    • ct?: 修改问号前的这条问句内容
    • s:替换当前字符
    • S: 替换整行
    修改句子
    • cis

    • 移动到行首并进入插入模式
      I

    • 在当前光标位置之后进入插入模式
      a

    从上面例子可知,有多种方式可以进入插入模式输入文本。还有一些简写来执行多条操作,比如说删除并进入删除模式。

    • 删除从光标所在位置开始到行末的所有内容,并进入插入模式
      C

    • 删除当前行并进入插入模式
      S

    修改大小写

    可以通过波浪符来变更大小写。就像你猜想的那种方式工作:不管你光标所在字符还是可视模式下选择的文本都可以。

    格式化文本

    Vim还可以快速格式化文本,比如格式化一整段文本,使用下面这个命令就可以很容易实现:

    格式化当前段落

    gq ap
    gp根据预设的文本宽度testwidth以及参数指定的文本范围来工作,这意味着对于你指定的任意范围的文本,gp都可以自动校准宽度,使得文档看起来干净又整洁。
    【注意: ap表示文本对象”整个段落”的覆盖范围】

    删除文本

    • x: 删除当前光标的字符
    • X:删除当前光标的前一个字符
    • dm: 根据定义的m来确定删除范围,一个单词或者一句话或者一个段落。
    • dd: 删除当前行
    • dt. : 删除当前位置到下一个句号之间的所有内容
    • D: 删除当前光标位置到本行末的所有内容(对比上面的C,D不会进入插入模式)
    • J: 将上下两行合并(删除两行之间的换行符)
    • nx //删除从光标开始的n个字符
    • ndd //向下删除当前行在内的n行

    撤消与重做

    • u: 撤销上一个动作
    • U //撤销对当前行的所有操作
    • Ctrl-r: 重做上一个动作

    重复动作

    使用“.”来重复上一次操作
    你所做的许多操作可能都有重复的价值。比如进入插入模式添加一些文本内容。你只需执行一次,然后一直执行点命令来重复就可以了。请看下面的例子。

    删除一个单词
    dw
    紧接着执行,再删除5个单词

    多么给力! 如果结合可视化模式,发挥的能力更让你大开眼界。

    复制与粘贴

    • yy //将当前行复制到缓存区,也可以用 "ayy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
    • nyy //将当前行向下n行复制到缓冲区,也可以用 "anyy 复制,"a 为缓冲区,a也可以替换为a到z的任意字母,可以完成多个复制任务。
    • yw //复制从光标开始到词尾的字符。
    • nyw //复制从光标开始的n个单词。
    • y^ //复制从光标到行首的内容。
    • y$ //复制从光标到行尾的内容。
    • p //粘贴剪切板里的内容在光标后,如果使用了前面的自定义缓冲区,建议使用"ap 进行粘贴。
    • P //粘贴剪切板里的内容在光标前,如果使用了前面的自定义缓冲区,建议使用"aP 进行粘贴。
    交换两行的位置
    • ddp
      使用这条命令可以很快速的交换两行的位置。第一部分删除你所在的行,第二部分将它粘贴回之前所在位置的下面。(ps:文章中用的是above,但是实际上拷贝回下方位置)

    拼写检查

    如果没有拼写检查的话,感觉会很糟糕,还好vim这方面做得很好。当然我们需要先在配置文件中配置拼写检查选项。
    在~/.vimrc的某个位置中添加

    找出拼写错误

    如果在配置文件中设置了拼写检查的选项,那么拼错的单词会自动添加下划线。你也可以手动输入:set spell和:set nospell来启用或禁用。

    使用以下命令来跳转:
    • 跳转到下一处拼写错误
      ]s

    • 跳转到上一处拼写错误
      [s

    • 若光标处是错误单词,给出修改建议
      z=

    • 将识别的错误单词标记正确
      zg

    • 将vim视为正确的单词标记为错误单词
      zw

    替换

    基本设置为:%s

    将每行的foo替换为bar

    :%s /foo/bar/g

    将当前行中的foo替换为bar

    :s /foo/bar/g

    【注意: 两个命令的不同之处在于,单行替换s前少了%】

    相关文章

      网友评论

          本文标题:关于Vim

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