Vim 修行之路

遗忘你所有关于编辑器的知识。放下尘世间的执着,开启 Vim 修行之路。

Vim初级:配置和使用

Bash Unix Vim sed 编译

Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。

文档参见:http://vimdoc.sourceforge.net/htmldoc/

中文文档:http://vimcdoc.sourceforge.net/doc/

感受Vim的强大:进阶技巧

Bash Markdown Unix Vim 寄存器 快捷键

Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。和Emacs并列成为类Unix系统用户最喜欢的编辑器。 如果你还没有使用过Vim,建议你先去看这个:Vim初级:配置和使用。本文介绍一些Vim的高级特性。包括块编辑、宏录制、语法高亮、键盘映射、函数定义、文件类型识别与对应插件加载等。

在VIM下写C++能有多爽?

C++ NERDCommenter Vim Vundle YCM 快捷键 代码风格

我是坚定的Vim党,因为和命令行的集成如此之好,Vim可以解决任何问题。然而在这个世界上,即便是最好用的工具也是需要配置的。 由于最近在写C++,经过一番配置后,小编写C++已经感到非常爽了,于是决定用一篇文章来记录如何打造一个适合写C++的Vim编辑器! 包括C++的自动补全、括号引号匹配、格式化、注释、编译运行快捷键等。

如果你还不了解 Vim 基本操作和配置方法,请参考 Vim初级:配置和使用。 如果你和 Harttle 一样也做前端开发,可以参考 打造前端开发的 Vim 环境

如何用Vim搭建IDE?

Bash Git Linux NERDCommenter Tmux Vim Vundle YCM 剪切板 快捷键

一年前我从Vim切换到了WebStorm,是因为WebStorm强大的重构功能,以及Super Search功能。涉及多文件编辑和重构时WebStorm的优势便非常明显。

最近到手了HHKB,从键盘到触摸板的切换还是挺麻烦的,于是Vim编辑的需求又来了。。加之WebStorm经常假死,我决定重新启用Vim。同时重新打造了我的Vim,使它能够满足我在IDE中的所有需求。这篇文章便来记述整个过程,或许有些帮助。先上图:

Vim 多文件编辑:标签页

Bash Linux Vim 快捷键

多文件编辑的场景太常见了:代码比对、项目重构、模块构建… 最初harttle在碰到这些问题时直接转向IDE了,其实Vim不仅支持多文件编辑,而且支持多种风格:标签页(tab)窗口(window)缓冲区(buffer)等。 今天harttle就来介绍一下Vim强大的多文件编辑!本文介绍Vim标签页的使用,另外两篇文章在这里:

要做一个强大的IDE,除了多文件编辑技巧,你可能还需要终端复用目录树

Vim 多文件编辑:窗口

Bash Linux Vim 快捷键

标签页(tab)窗口(window)缓冲区(buffer)是Vim多文件编辑的三种方式,它们可以单独使用,也可以同时使用。 它们的关系是这样的:

A buffer is the in-memory text of a file. A window is a viewport on a buffer. A tab page is a collection of windows. –vimdoc

本文主要介绍Vim窗口的创建与维护,另外两种编辑方式的使用可以参考: Vim 多文件编辑:缓冲区Vim 多文件编辑:标签页。先上图:

用Ag/Ack在Vim中搜索项目代码

Ack Ag CLI Vim Vundle grep 快捷键

Ag(The Silver Searcher)和Ack都是 CLI 的全局搜索工具,其中Ag更快一些,而Ack也比Vim自带的grep快很多。这些工具的Vim插件可以通过Vim Quickfix窗口来提供代码搜索的结果。 本文便来详细介绍如何在Vim中使用Ag全局搜索。

那么什么是Quickfix窗口呢? Quickfix是Vim的一个特殊编辑模式,该模式的提出最初是受启发于Aztec C编译器: 把编译错误写入一个文件中,然后从这个文件一一跳转到对应出错的源文件。

使用 Vim 寄存器

Linux Vim Windows X11 剪切板 寄存器 正则表达式

常见文本编辑器都会提供剪切板来支持复制粘贴,Vim也不例外。 不同的是Vim提供了10类共48个寄存器,提供无与伦比的寄存功能。 最常用的y操作将会拷贝到默认的匿名寄存器中,我们也可以指定具体拷贝到哪个寄存器中。

一般来讲,可以用"{register}y来拷贝到{register}中, 用"{register}p来粘贴{register}中的内容。例如: "ayy可以拷贝当前行到寄存器a中,而"ap则可以粘贴寄存器a中的内容。

Vim 中为 Markdown 配置回车展开

Markdown Vim Jekyll

靠Vim写Jekyll博客已经很久了,编写代码块(Code Fence)时键入前后的```, 以及手动编写文章头信息(Front Matter)一直是个麻烦的事情。 Harttle今天就通过Vim键盘映射来对这两种语法提供回车展开支持。最终效果如下:

在 Vim 中优雅地查找和替换

Vim 字符串 快捷键 正则表达式

总有人问我 Vim 中能不能查找,当然能!而且是超级强的查找! 这篇文章来详细介绍 Vim 中查找相关的设置和使用方法。 包括查找与替换、查找光标所在词、高亮前景/背景色、切换高亮状态、大小写敏感查找等。

Vim 中读写特殊字符

Unix Vim Windows 字符编码

在跨平台工作中由于不同编辑器处理换行和空白字符风格不一致, 常常在Vim下会看到一些特殊字符。这些特殊字符的含义可通过digraph-table查询, 也可根据digraph-table或Unicode/ASCII编码手动输入这些特殊字符。

查看特殊字符

Vim中可见特殊字符会直接显示,不可见特殊字符会显示为该字符在命令行的输入方式, 例如\r显示为^M。通过:help digraph-table可看到所有Vim中可输入的特殊字符, 该文档的第一页如下:

在 Vim 中进行文件目录操作

Vim 剪切板 寄存器 快捷键

很多时候我们希望在Vim中可以操作文件和目录,例如备份当前文件、 重命名当前文件、创建和删除旧文件、创建和删除目录等。 这些操作在Bash中当然可以很好地完成,但退出Vim会丢失光标位置、Buffer等信息, Harttle当然希望在Vim中完成这些操作。

本文介绍文件和目录的增删改查,同时编辑多个文件请参考这几篇文章:

Vim 中的变量类型与作用域

Vim 作用域 寄存器 环境变量 变量

有没有想查看一个 vim 变量的值却无从下手? 有没有被 Vim 变量作用域前缀搞晕? 有没有在 Vim 脚本中不知如何变量赋值? 本文梳理了 Vim 变量的赋值、取值与打印,以及在脚本中如何使用变量及其作用域。

TL;DR

  • 在命令模式、Ex 模式或 Vim 脚本中都可以操作变量。
  • 使用 let, echo, unlet 进行赋值输出和销毁,Vim 选项还可用 set 来操作。
  • $前缀表示环境变量、@前缀表示寄存器变量、&表示 Vim 选项。
  • 使用 b:,g:,l:,t: 等前缀可以限制变量的作用域。

在 Vim 中执行 Shell 命令

Shell Tmux Vim 进程 快捷键

刚开始使用终端和 Vim 工作时,桌面上总是铺满了执行各种任务的终端窗口,任务切换极其困难。 尤其在使用 Vim 编辑文件时每次想执行一些 Shell 命令就会新开一个窗口。 虽然搭建终端工作环境的终极方式是终端复用,但有一些更加轻巧的办法可以在 Vim 中快速执行 Shell 命令。

比如 :!cmd Vim 命令和 :sh Vim 命令,以及 Ctrl+Z Shell 快捷键。 除此之外还可以使用 benmills/vimux 来在 Vim 中操作 Tmux, 这可以达到类似 IDE 的效果:按下编译快捷键打开命令窗格并开始编译, 编译过程中 Vim 不会失去焦点,编译成功后自动关闭命令窗格。

Vim 中使用 eslint 检查代码风格

JavaScript Vim 代码风格 快捷键 ESLint

eslint 是一款可配置的插件式架构的代码风格检查工具。可配置不足为奇,但插件式的架构却能带来很多方便。 例如在单元测试代码中,引入 mocha 插件便可自动引入一系列额外的语法规则。

打造前端开发的 Vim 环境 一文中提到了使用 Syntastic 对代码进行代码风格检查。 但同时我们需要按照同样一份规则(就是下文的 eslintrc)来进行代码格式化。 本文详细介绍如何在 Vim 中引入 eslint,以及用 eslint 规则来格式化代码。

vimdiff 配置

Git Tmux Vim Diff

vimdiff 命令相当于 vim -d a.txt b.txt,用来查看两个文件的 diff。 可以通过 :highlight 命令来进行 diff 配色,也可以将 vimdiff 设置到 Git 的 diff 工具。