优雅的玩转vim

优雅的玩转 vim

笔者放一张自己的配置和日常的一些使用场景。
image

  • 提到 vim 就不得不说 emacs,围绕二者的圣战常年不休,vim 被称为编辑器之神,emacs 被称为神之编辑器,笔者日常双休,不过本文是优雅的玩转 vim,所以本文主要针对 vim,emacs 主要用来做 GTD 管理我的时间和项目的进度。开发用的是 vim,在配合 tmux,ranger 这样的 terminal tools,简直让你的开发效率提升 N 倍,双手只需要在主键区上飞舞即可。彻底摆脱左右手在键盘和鼠标之间来回折腾, 解放双手!

  • vim 一个被人熟知的 text editor,有的人听到 vim “望风而逃”,有的人听到会”嗤之以鼻”。为什么会这样?我总结了下大概是以下两个原因:

    • vim 的学习曲线是超级陡峭的,需要花费大量的时间如下图。正因为如此很多人甚至不敢上手,也有一部分半途而废。
    • image
    • 有一部分人认为即使把 vim 玩的再厉害效率也比不上 IDE 支持的丰富。
  • 针对以上问题我的回答是当你玩转了 vim 它确实是个开发利器,与 IDE 相比 基本上 IDE 拥有的功能在 vim 的生态环境中你都可以找到类似的插件,甚至有许多你想象不到的插件,简直可以满足各种日常需求甚至变态的需求。但是不得不承认一些功能来说相对 IDE 来说确实有些差距。笔者日常主要写 go react python,都有很不错的插件支持。并不逊色 IDE。

正确的入门 vim

学习 vim 需要一定的毅力,如果你没有极度的热爱很难坚持下去。入门分为几个阶段,都是笔者自己的经验总结,也许不一定适合每个人。只是做一个分享。

  • 第一个阶段:下载 vim,我比较推荐使用 neovim,相比 vim 提供了很多 Feature,熟悉 vim 的模式 Normal Insert Visual,vim 的默认是 Normal 模式,很多人奇怪为什么会是 Normal 而不是 Insert 插入模式, 玩 vim 不是长时间在 Insert 模式只有当你在撸码的时候你在 Insert 模式, 而是大部分时间在 Normal 模式进行操作。了解一些关于 vim 的哲学。

  • 当你了解了 vim 之后,你需要一本入门资料去了解 vim 的键位设置,笔者推荐一些资料

    • 速查表 vim 操作手册的速查表
    • 笔者朋友 PegasusWang 在慕课网退出的免费 vim 教程,在慕课网搜索 PegasusWang 即可
    • Vim 实用技巧等相关的书籍也很不错
  • 熟悉 vim 键位之后,你需要了解 vim 的一些基础的设置比如如何设置行号,设置颜色主题,缩进,删除等等,并试着开始配置你的 vim 配置文件,vim 是.vimrc,neovim 是 init.vim。

  • 了解了 vim 的一些基础设置,开始学习 vim 的键位设置,如何映射键位,不同模式下的键位映射,键位映射的区别,例nnoremap nmap的含义。

  • 当你熟悉了 vim 的基础设置了和键位映射了。试着装一些插件吧,你需要一个插件管理器简单易用的vim-plug, 当然还有其他插件管理器比如dein出自于 Shougo 大神来自日本的一位 vimer,玩 vim 应该很少没有人不知道 Shougo,创作了很多非常优秀的插件。但是 Shougo 的插件并不适合初学者使用。比较难理解,刚入门应该以简单易用为主。

  • 试着去搜索你想要的插件,这里分享一个网站vimawesome,你可以去找一些 vim 的配置或者文章看看别人在用的插件,这里我实在没法罗列太多了。你可以在我的配置中找到我安装的插件列表。我的配置会在文章的末尾贴出来。这里要说明的是使用插件最好阅读每个插件的 doc,或者搜索下资料。有 bug 可以提 issue 给插件作者,尽量使用英文。

  • 到这里你可以把 vim 玩起来了,但是还不够,接下来就要入门 vimscript 了,vim 的脚本语言。这个就和你学习编程差不多了。国内有一些不错的教程例如笨方法学习 vimscript, 笔者大概看了这个入门之后翻阅别人插件的源码这样的办法。然后试着自己写一些脚本函数实现自己想要的功能。

  • 学习 vim 的过程中你会遇到各种各样的问题,多去搜索。坚持下去

  • 分享一些比较有趣的

LanguageServerProtocol

什么是 Language Server Protocol? 它的官方 Wiki 如此写到:

The Language Server protocol is used between a tool (the client) and a language smartness provider (the server) to integrate features like auto complete, goto definition, find all references and alike into the tool.

Language Server Protocol(LSP),语言服务端协议,是由微软提出,并与 Redhat、Codenvy、Sourcegraph 等公司联合推出的开源协议(使用 Creative Commons Attribution 以及 MIT License),用于智能语言服务程序向编辑器等工具提供诸如自动补全(auto complete)、跳转到定义(go to definition)等功能的场景。LSP 根据编辑器与编程语言分析器的交互制定了一套公共的流程。每个具体的语言实现 LSP 协议后,编辑器通过调用不同语言的 Language Server,从而实现支持不同语言特性的需求。

Golang 有 gopls,Python 有 Mpls,pyls,jedi,Rust 有 rls,C/C++/OC 有 ccls clangd 等等,基本上很多语言都有支持 lsp 的 server。

有了 lsp 这样的利器,你可以在 vscode,atom,vim,emacs 上得到和 IDE 同样的补全,跳转等等的体验。

CoC.nvim

什么是CoC.nvim,是由国人赵启明大佬开发的 vim 下支持 lsp 的插件,而且作者开发了很多的扩展,简直是 changelife!!

ThinkVim

ThinkVim 是我的配置框架,集成了很多丰富的插件,为很多 vimer 提供一个合理快速功能齐全的配置框架。
image
spaceline 是我写的状态栏插件类似 spacemacs 的状态栏 spaceline。
image

End

其实折腾 vim,emacs 这些可以让生活充满乐趣,也能学习到一些思想提升自己。如果你时间比较充裕我很推荐你去挑选其中一款入门,不过对于比较忙碌的人来说它会耽误你太多时间,需要取舍了。声明在于折腾!~~