type
date
status
slug
summary
tags
category
password
icon
😀
这里写文章的前言: 在编辑的时候要多想一想,有没有更方便快捷的方式实现?不用怀疑,一定会有的!

Vim中文手册

vim基本动作

  1. (c)hange: 修改(删除+进入编辑模式);
  1. (d)elete: 删除;
  1. (y)ank: 复制;
  1. (p)aste: 粘贴;
  1. z: 折叠

vim基本修饰词

  1. (f)orward: 向前,寻找目标;
  1. (i)side: 用于删除引号、括号之内的内容;
  1. (a)round: 常用于删除引号、括号中及两边括号的内容;
  1. NUM: 数字,代表单词个数,执行行数;
  1. (t)o: 向前,目标之前;

vim基本名词

  1. w: 单词;
  1. s: 句子;
  1. p: 段落;
  1. b: 块;

vim基本位置

元位置

  1. $: 行尾;
  1. ^: 当前行第一个非空白符位置;
  1. |: 当前行首;
  1. w:当前单词/下一单词的位置;
  1. b:当前单词/上一单词的位置;
  1. e:当前单词/下一单词的最后一个字符的位置;

组合位置

 

光标移动常用命令

  1. h+j+k+l
  1. 0: 当前行首
  1. $: 当前行末
  1. w: 向前移动一个单词(跳转到下一单词词首)
  1. b: 向后移动一个单词(跳转到上一单词词首)
  1. e: 移动到单词末尾,再次按下移动到下一单词词尾
  1. H: 移动到当前screen的顶行
  1. M: 当前screen中间行
  1. L: 当前screen的尾行
  1. Ctrl+u: screen向上移动半页
  1. Ctrl+d: screen向下移动半页
  1. Ctrl+f: 全页下移
  1. Ctrl+b: 全页上移
  1. 添加标签,便于在标签之间进行跳转:
    1. ma: 设置一个局部标签,名字为a
    2. mA: 设置一个全局标签,名字为A
    3. `a/'a: 跳转到标签a
    4. delmarks a: 删除标签a
    5. marks: 查看当前设置的标签
 

常用插入命令

  1. i
  1. I: 在当前行的行首插入文本
  1. a
  1. A
  1. o
  1. O
  1. r
  1. R: 替换光标下的字符,并继续插入
  1. C: 直接修改掉当前行
  1. s:

Vim中normal模式下小技巧s

  • J: join,合并行;
  • %: 如果光标再左括号,则移动到右括号;如果光标再右括号,则移动到左括号;

    Ubuntu中将CapsLk与Ctrl键互换

    环境

    Ubuntu 20.04 步骤

    $ sudo vim /usr/share/X11/xkb/keycodes/evdev 搜索 <CAPS> 和 <LCTL>,交换等号后面的数字
    注销,重新登录以生效。

    使用vim在不同文件之中进行切换

    低效的实现

    键入:wq 并打开另一个文件。

    高效的实现

    键入:e <file-name> 来打开另一个文件。
    键入:enew 来编辑一个未命名的新文件。

    在vim编辑器中查询命令

    低效的实现

    网络查询。

    高效的实现

    键入:help {...} ,例如::help :w 查看:w 的功能,或者:help w 查看命令w的功能。

    vim中的映射方式(配置.vimrc)

    • nmap 普通模式下的递归映射
    • imap 插入模式下的递归映射
    • vmap 可视模式下的递归映射
    • cmap 命令模式下的递归映射
    • nnoremap 普通模式下的非递归映射
    • inoremap 插入模式下的非递归映射
    • vnoremap 可视模式下的非递归映射
    • cnoremap 命令模式下的非递归映射
    利用上述tip,实现了一些快捷键的映射: 调整是否显示数字。

    高效实现

    在.vimrc文件中添加nnoremap <leader>N :set nonumber ,然后直接按下\+N。

    vim关于向上翻页的技巧

    如果光标已经到达了文件的底部而导致太接近页面的底部,可以使用ctrl+f向上翻页,使得光标下方产生很多空白,使得编辑过程更舒适。

    vim命令模式下的查找命令技巧

    搜索整个单词

    vim关键词查找替换命令

    :s (substitute) 命令用来查找和替换字符串,具体语法如下:

    vim多文件编辑

    vim标签页(tab)

    vim窗口(windows)

    vim缓冲区(buffer)

    vim中wildmenu配置

    vim多文件编辑总结

    1. 每次执行vim命令,都是打开了一个vim会话(session);
    1. vim会为其打开的每一个文件都创建一个buffer缓冲区,每次对文件的修改都会该buffer产生影响,并在保存时一同写入硬盘, 注意在每次切换缓冲区时都需要保存当前缓冲区的修改内容;
    1. 每次创建一次vim会话时,vim都会创建一个tab,用于显示当前编辑文件,每一个tab可以划分为多个窗口;
    1. 所有以tab和windows显示的文件都会生成一个buffer缓冲区。

    vim多文件编辑关键字

    1. 标签页关键字前缀:tab
    1. 缓冲区关键字前缀:b
    1. 窗口关键字:
      1. :sp {file}水平分割窗口
      2. :vs {file}垂直分割窗口
      3. :close关闭当前窗口

    vim文件目录插件NERDTree

    打开NERDTree

    本质

    纵向划分窗口显示NERDTREE内容, 可以使用vim窗口命令进行光标的切换。

    关闭NERDTree

    q

    快捷键打开

    • \+NT: 打开当前工作目录的文件树;

    打开方式

    • NERDTreeFocus: 光标位于在上次光标停留位置;
    • NERDTree: 光标停留在当前文件路径的根目录处;
    • NERDTreeToggle: 打开/关闭目录树;
    • NERDTreeFind: 光标停留在当前文件上;

    光标移动

    • P: 移动到当前工作目录的根目录处;
    • p: 移动到光标文件/文件夹所在字根目录处;
    • K: 移动到光标文件所在目录的第一个文件处;
    • J: 与K相似,到最后一个文件

    文件夹操作

    • o: 非递归开关光标所在文件夹;
    • O: 递归打开光标所在文件夹;
    • x: 非递归折叠光标所在文件所属的目录;
    • X: 递归折叠光标所在文件夹下所有子目录,但是并不折叠光标所在目录;
    • e: 在编辑区打开当前文件的目录,按q键退出;
    • C: 进入光标所在目录,并将其设置为根目录;
    • u: 将当前目录的上一级目录作为根目录,老目录并不打开;
    • U: 进入上一级目录,老目录打开;
    • R: 刷新当前目录所有文件夹;

    文件操作

    • o: 在编辑区以替代的方式打开文件;
    • go: 预览当前文件(指光标并不切换到编辑区域);
    • i: 将编辑区横向划分打开文件;
    • s: 将编辑区纵向切分打开文件;

    Vim按键映射高级技巧

    按键字队列和字符队列

    • 按键队列:用户键盘输入的字符队列;
    • 字符队列:Vim最终要处理的字符队列;

    map命令

    常见语法如下

    • 第一个字段指出具体的映射命令(:h map-modes);
      • n[nore]map: Normal模式;
      • i[nore]map: Insert模式;
      • v[nore]map: Visual+Select模式;
      • [nore]map: Normal+Visual模式;
      • [nore]map!: Insert+Command模式;
    • {lhs}表示映射前的按键序列;
    • {rhs}表示映射后的字符序列;
    • map前添加nore表示非递归映射;
    • <args>表示map命令的一些参数,常用:
      • <buffer>: 表示该映射知识在当前的buffer中定义,而非全局映射;
      • <expr>: 表示{rhs}是一个Vim表达式,而不是按键序列;
      • <silent>: 表示静默映射,不会显示Vim在处理rhs过程中对界面产生的变化。
      •  

    将tmux中的vim颜色与terminal进行统一

    解决办法:首先确保 Shell的环境变量TERM 在Tmux中以及不在Tmux中是相同的。
    1. 不在tmux中打印TERM的值;
    1. 在.tmux.conf中添加如下脚本,将tmux中的TERM变量设置为该值:

      vim实现自动保存

      在实践中总结、完善技能

      要一边编译,一边动脑!
      • 向前删除:可以使用d0、db等命令;
       
      算法讲义Something of C language