神级编辑器 Vim 使用 - 1.基础篇

最近一段时间, 看了两本关于 vim 的书, 从新学了一遍 vim, 在感慨 vim 强大的同时, 也为从前的自满感到汗颜, 我拿起了从前作的关于 vim 的笔记, 从新梳理了一遍, 做为一个系列分享到网上, 主要目的是想让更多 vim 的爱好者可以掌握更多的操做技巧.html

本系列 vim 笔记的目的不是从零教会你如何操做 vim, 而是做为一本手册或者扩展你的视野, 让你知道原来 vim 还能这么用.git

但愿你能从本系列教程中收获到你感兴趣的部份内容!vim

本系列教程共分为如下四个部分:浏览器

  1. 神级编辑器 Vim 使用 - 1.基础篇
  2. 神级编辑器 Vim 使用 - 2.操做篇
  3. 神级编辑器 Vim 使用 - 3.插件篇
  4. 神级编辑器 Vim 使用 - 4.正则操做篇
  5. 神级编辑器 Vim 使用 - 5.最后

himg

vim 是否值得学习

网上有不少形容 vim 的学习曲线是如何陡峭的说法. 人, 最恐惧未知的事情. 若是有人给你说: 你花一天的时间找一个入门教程进行学习就能够学会基础操做, 你会学习 vim 吗? 绝大部分人都是会的, 其实事实也就是这样, 若是只是基础操做的话 1 天时间绝对是够了. 可是绝大多数人得不到这样的答案, 因此他们关上了这扇窗.bash

在我看来, vim 的学习投入与产出的性价比是很高的, 学习了 vim 后你会有以下的一系列好处:服务器

  • vim 基于终端, 熟练掌握 vim 后你对终端的理解也会变得更为深入
  • vim 能够联合终端中的其余工具共同组成你的工具链(譬如 git)
  • Atom, Sublime, VSCode, NOTEPAD++ 等工具泛滥的现在, 你能够选择一个有着近 40 年历史的通过了时间考验的编辑器
  • 操做远程服务器时常常须要在终端中进行文本编辑, vim 可让你如履平地
  • vim 支持全部平台, 你可使用一份配置文件全平台通用
  • 装 13

编辑器的切换是有成本的, 并且成本不小. 任何事情作到一半再去作另外的事情绝对比从一而终的人损失大得多, 所以选择一个适合本身的编辑器做为之后的伙伴是一件应该慎重的事情, 而使用过 vim 的人不多会再换用其余的编辑器, 这应该能说明不少问题.markdown

有些人持有工具无用论的观点, 认为写好代码才是一切, 事实确实是这样. 可是难道有人会拒绝更快速, 更高效的写完一段优雅的代码吗? 这二者并不是是鱼和熊掌不可兼得, 咱们均可以有.编辑器

这方面话题比较容易引战, 点到为止, 具体如何交由读者自行判断.工具

Let's go!oop

安装

第一步固然是安装, 这里对 MacOSLinux 进行安装示范

MacOS

不一样版本安装

  1. 系统内置

    Mac OS 默认内置 vim, 在没有安装任何其余版本 vim 的状况下在终端中输入 vim --version 可看到以下图:

    himg

    + 表明含有的功能, - 表明不包含的功能. 能够看到系统内置 Vimclipboard 选项为 - , 表明没有剪贴板功能, 也就是说不会与系统剪贴板有任何互动, 即在 vim 中的内容没法复制到另外一个程序中, 不管如何设置都没法改变. 这是最大的区别.

    并且因为是系统内置, 因此若是想要手动升级的话没有可能, 只能等到系统更新的时候 Apple 更新官方内置 vim .

  2. 官方版 Vim, 经过 Homebrew 安装

    在终端输入 brew install vim 能够经过包管理工具 Homebrew 来安装官方版本 Vim. 安装完后的 vim 位置在 /usr/local/bin/vim (经过系统命令 which vim 能够知道具体程序的路径), 而系统自带的 vim 位置在 /usr/bin/vim, 若是要使用经过 Homebrew 安装的 Vim, 则必须将系统识别的环境变量 PATH 顺序调整为

    /usr/local/bin
    /usr/bin
    /bin
    /usr/sbin
    /sbin
    复制代码

    调整 PATH 顺序方法: 打开路径 /private/etc/paths (此为隐藏路径, 须要打开显示隐藏文件开关才能看到), 使用任意文本编辑器打开修改并保存. 以下图:

    himg

    这样设置以后当在终端中输入 vim 时系统会先对 /usr/local/bin 路径进行检索, 若是此路径没有的话在对 /usr/bin 进行检索, 以此类推. 此时再次验证 which vim 命令, 若是返回了 /usr/local/bin 就说明设置成功. 之后只要是使用 vim [filename] 便可使用经过 Homebrew 安装的 vim 来打开了.

    此时经过 vim --version 可看到以下图

    himg

    最大的改变是 clipboard 选项变为了 +, 并且不少功能也变为了 + .

    经过 Homebrew 安装的 vim 一切都很好, 我也用了很长一段时间, 可是有两个问题一直困扰着我:

    1. 使用输入法插件在插入模式与普通模式切换之间有较大延迟, 例如在退出输入模式后会有 2-3 秒的延迟, 在这段延迟中若是我操做了键盘任何键位, 结果将被键入到输入法中. 体验极差.
    2. 速度. 在编辑较长的 Markdown 文件时, 若是开启了语法渲染以及底部状态栏插件的话会在快速移动光标过程当中有较大延迟. 这种感受在遇到语法段落结构复杂, 且光标移动较快时最为明显. 极大的影响了使用感觉.

    若是 vim 一直是这种问题的话也当不得 编辑器之神 的称呼了. 我上网搜索后发现有不少人都跟我同样注意到了这一点. Mac 终端上的 vim 速度慢, 卡顿, 在 Linux 下就很是流畅没有任何延迟. 经过多方查证, 我测试了 MacVim 在 Mac 系统下的流畅程度. 果真有惊喜.

  3. MacVim, 经过 Homebrew 安装

    MacVimvim 在 Mac 系统的移植, 其内核与官方版本保持一致. 也就是说若是官方版本的 vim 在 Mac 上能实现什么功能, 那么 MacVim 也能实现相同的功能.

    经过 Homebrew 安装的话只须要用到命令 brew install macvim. 安装完成后在终端使用 mvim 便可打开 MacVim 桌面程序.

    若是想经过终端打开 MacVim 的命令行版本, 使用 mvim -v [filename] 便可.

    注: 因为经过 Homebrew 安装的绝大部分包都没有 GUI, 所以 Homebrew 不会将包移入 /Applications, 这致使了若是想在桌面上双击一个文件来使用 MacVim 打开很难实现, 并且在 Mac 的 LaunchPad 里是找不到 MacVim 的(即便它是一个 GUI 软件)

    所以, 有了下一个解决方法.

  4. MacVim, 经过 Homebrew Cask 安装

    CaskHomebrew 的一个软件管理程序. Homebrew 自己就已是包管理工具了, 其下的 Cask 又能管理程序, 一层套一层, 真会玩. 不过 Homebrew 绝大部分包都是一些环境, 而不是平常用户操做的交互式软件. 而 Cask 绝大部分包都是 GUI 软件. 经过 Cask 咱们能安装绝大部分咱们平常须要的软件, 好比 QQ, 音乐, 浏览器, 各类工具...

    经过 brew install cask 安装 Cask 包. 安装完成后再经过 brew install macvim --cask 来安装 MacVim .

    himg

    安装完成后你能够经过终端得知 MacVim 自动将 mvim 命令与路径 /usr/local/bin 里的 vim, gvim, view 等命令进行了绑定. 这表示在 系统变量 PATH/usr/local/bin 第一的时候, 咱们只要是使用 vim, gvim, view 中的任意一个都会打开 MacVim 桌面端程序.

    若是此时仍是想用 MacVim 以命令行模式打开文件的话可使用 mvim -v 或者 vim -v 或者其余几个绑定的命令. 固然我为了方便直接在 ~/.zshrc (我是用的是 zsh) 中设置了 alias.

    alias vim='mvim -v'
    复制代码

    设置完记得使用 source ~/.zshrc 或者重启终端来重载 ~/.zshrc

对比与总结

经过 MacVim 与 终端 vim 的安装体验对比, 总结了 MacVim 的以下优缺点(一样对应 vim 的优缺点):

  1. 优势

    • 有系统级别的复制粘贴撤销快捷键,
    • 滚动更流畅,
    • 输入法切换速度更快,
    • 右侧的导航滑轨也有了做用
  2. 缺点

    • 没有集成在终端中意味着与终端切换的成本更大
  3. 总结

    若是必须在 Mac 上使用 vim, 并且对流畅度要求比较高, 那么就是用 MacVim 吧.

    若是绝大多数工做环境都在终端上完成, 那么就使用终端 vim .

    若是要求兼具了以上二者, 就等待吧, 等官方解决 Mac 系统上的延迟问题

CentOS

在 CentOS 中咱们可使用以下方法安装 vim

  • 源码编译
  • yum 安装
  • GUI 版 vim 安装

可是通过屡次试验以后发现这三种方法的前两种都是剪贴板缺失的 vim, 也就意味着不能与系统剪贴板进行交互, 所以最好安装 GUI 版 Vim

sudo yum install vim-X11
复制代码

调用 vim 时使用 vimx 代替 vim

Debian && Ubuntu

安装 vim-gtk or vim-gnome.

Arch Linux

安装 install gvim

Vim 模式区分

模式是 vim 与其余编辑器的最重要区别之一, 简单来讲就是一样一个界面的一样操做在不一样模式下会产生不一样的效果. 最经常使用的模式有 Normal Mode, Insert Mode, Visual Mode, 与 Command Line Mode

普通模式(Normal mode)

Vim 默认模式, 又称为命令模式, 可以使用 hjkl 进行移动和简单编辑

插入模式(Insert Mode)

该模式下能够尽情地输入, 普通模式经过 i, a, o, cc 等命令可进入插入模式.

可视模式(Visual Mode)

与普通模式相似, 不一样的是当移动时会进行扩展当前的选择区域. 普通模式按 v(进入字符选择模式) 或 V (进入行选择模式)进入该模式

命令行模式(Command Line Mode)

在该模式下能够在窗口的下方输入一行命令, 而后执行. 当一条命令执行完会自动退出命令模式进入普通模式.

命令模式经过输入 : 进行开启

替换模式(Replace Mode)

新输入的文本会替换光标所在处的文本, 并使光标依次向后移动.

普通模式下经过按 R 进入该模式

Ex Mode

与命令模式类似, 不一样的是在该模式下可执行屡次命令不会自动退出命令模式. 直至输入 :visual 退出该模式

在普通模式下经过按 Q 能够进入该模式

vim 键位映射

当咱们写了脚本或者不喜欢某些按键的触发方式, 咱们固然能够将其改成咱们认为最适合咱们的键位, vim 对按键映射作了极为精细的区分, 让咱们能够更好地掌控全局.

键表

  • <k0>-<k9>: 小键盘数字 0 到 9
  • <S-x>: 大写 S 配合 x, 意味着 shift+x 组合键
  • <C-x>: 大写 C 配合 x, 意味着 ctrl+x 组合键
  • <A-x>: 大写 A 配合 x, 意味着 alt+x 组合键
  • <ESC>: ESC 键
  • <BS>: backspace 退格键
  • <CR>: ENTER 回车键
  • <Space>: 空格键
  • <Shift>: shift 键
  • <Ctrl>: ctrl 键
  • <Alt>: alt 键
  • <F1>-<F12>: F1 到 F12 功能键

前缀

由于 vim 有多种模式, 所以咱们能够针对不一样的模式设置不一样的快捷键映射

  • map: 用于正常模式, 但是模式, 选择模式, 操做待决模式

  • nmap: 用于正常模式

  • vmap: 用于可视模式与选择模式

  • xmap: 用于可视模式

  • smap: 用于选择模式

  • omap: 用于操做待决模式

  • map!: 用于插入模式与命令行模式

  • imap: 用于插入模式

  • cmap: 用于命令行模式

  • nore: 不递归, 不然在下面的按键映射下按下 i 就等于按下 k, 就等于按下 j, 最后结果乱套.

    nnoremap  i   k
    nnoremap  k  j
    nnoremap  j   h
    复制代码
  • <Leader>: 意思就是在各类快捷键的最前面加上<leader> , 避免了二义性. 以下所示, 在普通模式按下##w 时, 就完成了文件的保存工做(若是不进行自定义设置的话, 默认的 leader 键为反斜杠 \)

    let mapleader="##"
    nmap `<leader>` w    :w<CR>
    复制代码

实际修改举例

inoremap ' ''<esc>i " 单引号补全 // 在普通模式, 快速按下 fw, 就至关于输入了: w<CR>, fw 能够理解成 file\_write. "文件保存与退出 nmap fw :w `<CR>` nmap fq :q `<CR>` nmap fwq :wq `<CR>` 复制代码

最后

本文做者 Hanley Lee, 首发于 闪耀旅途, 若是对本文比较承认, 欢迎 Follow

相关文章
相关标签/搜索