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

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

希望你能从本系列教程中收获到你感兴趣的部分内容!

himg

本系列教程共分为以下五个部分:

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

vim 是否值得学习

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

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

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

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

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

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

Let's go!

安装

第一步当然是安装, 这里对 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

himg

神级编辑器 Vim 使用-基础篇相关推荐

  1. 神级编辑器 Vim 使用-插件篇

    在这篇中, 会列举各种实用的插件, 包括他们的安装, 配置及使用方法 注意: 不是本部分的所有插件都是你需要装的, 如果盲目安装插件只会导致你 vim 功能混乱, 速度底下, 所以适时整理真正需要的插 ...

  2. 神级编辑器 Vim 使用-正则替换篇

    Vim 的替换查找是其核心功能, 功能极其强大, 通过其规则匹配, 可以很快速地完成我们很多需要大量人力操作的工作, 而且可对多文件使用查找/替换功能. himg 本系列教程共分为以下五个部分: 神级 ...

  3. 神级编辑器 Vim 的基本使用命令

    功能 命令行模式下的文本编辑器 根据文件扩展名自动判别编程语言.支持代码缩进.代码高亮等 使用方式: vim filename 如果存在文件,则打开它 如果不存在该文件,就创建一个新的文件,并命名为f ...

  4. 统一了Excel和Python的神级编辑器GridStudio,安装起来确实不简单

    点击上方SQL数据库开发,关注获取SQL视频教程 SQL专栏 SQL数据库基础知识汇总 SQL数据库高级知识汇总 昨天发了一篇关于神级编辑器Grid Studio的推文<>.它主要的功能就 ...

  5. Linux系列开坑记(二)-神的编辑器Vim

    今天是Linux系列命令第二篇,今天我们来简单聊聊Vim这个号称是「编辑器之神」的编辑器---Vim 是Vi Imporved,vi来源visual单词,目的是在做可移动光标的视频编辑文本. 写这篇文 ...

  6. VisualStudio神级插件Resharper技巧基础入门到骨灰玩家使用全教程+Resharper性能优化

    我相信很多做.NET开发的童鞋应该都装了Resharper这个重量级插件,但在我的印象里很多人也就只用到了他的一些基本功能,可能算是大材小用了吧,某天,在跟一同事进行结对编程的时候,看到同事也安装了R ...

  7. 高效率编辑器 VIM-操作篇,非常适合 VIM 新手

    虽然从很久前就开始用 VIM 了,但一直都是半调 吊 子,翻来覆去只用自己会的命令.最近为了提高书写代码的效率,还有 coding 时候的乐趣,又重新钻研了一下 VIM,发现了一篇很好的 VIM 入门 ...

  8. 《呆呆大虾原创VIM教程-基础篇》文 and《Vim-从入门到进阶》图

    目录 将CapsLock 键 改为 ESC键 原创Vim教程-01前言 原创Vim教程-02小试牛刀 原创Vim教程-03帮助(辅助) 原创Vim教程-04移动 对区域进行选择(图) Vim教程-05 ...

  9. Sublime Text2,跨平台神级编辑器乱码问题解决

    SubLime Text2是一个跨平台的源代码及文本编辑器,个人感觉可以称之为MAC平台上TextMate的跨平台版,界面.功能和快捷键都很舒服.唯一不足是对中文支持不好,打开含有中文字符的文件会乱码 ...

最新文章

  1. 向uliweb中添加查找配置项功能
  2. Cordova各个插件使用介绍系列(七)—$cordovaStatusbar手机状态栏显示
  3. 用于改善质量、稳定性和多样性的可增长式GAN
  4. C语言函数题-取子串 (10分)
  5. P3426-[POI2005]SZA-Template【KMP】
  6. 大工20秋计算机组成原理在线作业2,大工14秋《计算机组成原理》在线作业2答案...
  7. 商务搜索引擎_2019年中国网民搜索引擎使用情况研究报告
  8. 求一个数是几位数,并求每位数相加的和
  9. html文件实践总结,html,css学习实践总结
  10. 2021新鲜出炉软件测试的真实面试题(一篇足以)
  11. 键盘皇者 RealForce 104Pro独家评测
  12. java clear new_Java基础之Map的clear和new的区别
  13. Zookeeper 常用Shell命令总结
  14. 【Matlab系列】Matlab语言基础知识汇总
  15. 华为一直响应服务器异常,服务器不断异常重启
  16. docker for desktop一直starting
  17. app后端 服务器端 后台 部署图
  18. 鼠标点击按钮相应两次
  19. linux 打开网页 看不清网页上的字体呈现出框,电脑浏览器打开网页字体显示模糊如何解决...
  20. npm run build报错Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of

热门文章

  1. 新手入门12个必备的Python函数,少有的知识分享记得收藏
  2. 尚硅谷java练习题to循环
  3. 微信小程序云开发之模糊搜索
  4. linux创建pc目录,在linux汇编语言中创建一个目录
  5. 阿里巴巴-口碑-上海-Java一面部分面试题
  6. 卡拉兹(Callatz)猜想(以VS2017为例)
  7. android平板怎么双清,华为M2平板10.0怎么双清?华为M2进入recovery格机恢复出厂设置...
  8. GPT-4和ChatGPT的区别
  9. PHPCMS手机访问,调用手机模板
  10. 【Python】常用小代码