完全用 Vim 工作

不仅要能退出 Vim,而且要完全用 Vim 工作,解决路上的一切问题。

在 Vim 中复制、剪切和粘贴

Vim 剪切板 寄存器 快捷键

不同于 Emacs,Vim 确实是一个编辑器。那么编辑器能不能复制粘贴呢?肯定是可以的。不过要在 vim 中完成复制粘贴是需要敲键盘的,虽然略复杂但是功能也更强。 这篇文章来详细介绍 Vim 中复制粘贴的设置和使用方法。 包括复制当前字符/当前词/当前行,复制整个文件内容,粘贴刚才复制/剪切的内容;在插入模式/命令行模式粘贴;复制到 Windows/Mac 系统剪切板。

Vim 使用系统剪切板

Vim 剪切板 寄存器

Vim 是运行在 Terminal 里的 Shell 程序,所以要把内容拷贝出来可以通过 Terminal,也可以通过 Vim 自己。不配置 Vim 剪切板时只能通过 Shell 来拷贝粘贴: 通过 Shell 拷贝(比如在 iTerm 里按住 Alt 选取内容)会有问题:比如会包含 Vim 左侧行号、折行变成了换行。 通过 Shell 粘贴有类似的问题:相比于 p 命令,在插入模式下 Ctrl+V 时 Vim 会把内容当作字符键入,触发 Vim 的所有处理键入的插件,比如自动补全、语法检查等。不仅会很慢,而且可能会破坏你的内容(比如粘贴一对括号,可能 Vim 会再帮你自动补全一个多余的右括号)。 所以完美的拷贝粘贴一定要通过 Vim 本身。Vim 中 p(paste)、d(delete)、y(yank)等拷贝粘贴操作使用的是 匿名寄存器 ""(unnamed register),本文就来解释怎么在 Mac/Windows/Linux 上把 Vim 的 匿名寄存器 映射到操作系统的剪切板。 TL; DR 确保你的 vim 支持剪切板,通过 vim --version | grep clipboard 检查。 确定你的剪切板寄存器是 "+(XA_SECONDARY)还是 "*(XA_PRIMARY)。 同步剪切板和匿名寄存器,在 ~/.vimrc 添加配置比如 set clipboard=unnamed。

Vim 下大小写敏感的搜索/替换

Vim 大小写敏感 搜索 替换

Vim 中的搜索默认是大小写敏感的,即搜索 vim 不会匹配到 Vim。 这一点跟多数编辑器/IDE 都不同,因此 Vim 的默认设置其实很不顺手。 本文来分享一些个性化的配置方法,让 Vim 下的大小写敏感/不敏感用起来更加顺手。 比如当搜索词包含大写时应用大小写敏感搜索;其他情况应用大小写不敏感搜索。 TL;DR 以搜索词为 harttle 为例(省略了最后的回车): 强制大小写不敏感搜索:/harttle\c 强制大小写敏感搜索:/harttle\C 强制大小写不敏感替换:s/harttle\c/Harttle 强制大小写敏感替换:s/harttle\C/Harttle 设置为大小写敏感::set ignorecase 设置为大小写不敏感::set noignorecase 设置为智能模式(有大写时敏感否则不敏感)::set smartcase 设置为非智能模式::set nosmartcase

如何调试 Vim 脚本

Vim 调试 日志

使用 -D 参数可以开启 Debug 模式, 在 Debug 模式中可以使用 cont, next, interrupt, step, quit 等调试命令, 以及 breakadd, breakdel 来添加和移除断点。 使用 -u 来禁止加载任何配置文件,使用 :source 命令逐个加载。 使用 :set verbose 和 :set verbosefile 等 配置变量 可以设置日志级别和输出文件, -V 启动参数也可以起到同样的作用。

Vim 中配置 C++ 编码风格检查

cpplint Syntastic C++ Vim

cpplint 是 Google C++ 代码规范的静态检查工具,是一个简单的 Python 脚本。 借助 Syntastic 工具,可以配置为 C++ 文件的检查工具。 本文只介绍 C++ Linting 的配置,关于代码所进、注释、自动补全、括号匹配等 配置方式请参考 这篇文章。先上图:

Vim、Tmux、系统共用剪切板

SSH Tmux Vim 剪切板 寄存器

在 Tmux 终端复用 中介绍过 Tmux 的使用, 当你同时有系统剪切板、Tmux Clipboard、Vim Yank Buffer 时互相拷贝是不是很困难? 本文介绍如何让它们共用一个剪切板。

在 CentOS 6 上编译 Vim 8

CentOS Vim 编译

十年后 Vim 发布了 8.0 版本,为了尝鲜只能手动编译 Vim 8。本文记录了整个过程以及其中的坑,最终达到这几个目的: Vim 8.0 版本(YouCompleteMe 要求 7.4.1578 以上,且编译有 Python 支持) CentOS 6(CentOS 7 貌似已经有 相应的Repo 文件 了)

Vim 中使用 Eslint 检查代码风格

JavaScript Vim 代码风格 快捷键 ESLint

eslint 是一款可配置的插件式架构的代码风格检查工具。可配置不足为奇,但插件式的架构却能带来很多方便。 例如在单元测试代码中,引入 mocha 插件便可自动引入一系列额外的语法规则。 打造前端开发的 Vim 环境 一文中提到了使用 Syntastic 对代码进行代码风格检查。 但同时我们需要按照同样一份规则(就是下文的 eslintrc)来进行代码格式化。 本文详细介绍如何在 Vim 中引入 eslint,以及用 eslint 规则来格式化代码。

在 Vim 中执行 Shell 命令

Shell Tmux Vim 进程 快捷键

刚开始使用终端和 Vim 工作时,桌面上总是铺满了执行各种任务的终端窗口,任务切换极其困难。 尤其在使用 Vim 编辑文件时每次想执行一些 Shell 命令就会新开一个窗口。 虽然搭建终端工作环境的终极方式是终端复用,但有一些更加轻巧的办法可以在 Vim 中快速执行 Shell 命令。 比如 :!cmd Vim 命令和 :sh Vim 命令,以及 Ctrl+Z Shell 快捷键。 除此之外还可以使用 benmills/vimux 来在 Vim 中操作 Tmux, 这可以达到类似 IDE 的效果:按下编译快捷键打开命令窗格并开始编译, 编译过程中 Vim 不会失去焦点,编译成功后自动关闭命令窗格。

Vim 中的变量赋值、引用与作用域

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

使用 let 进行变量赋值,echo 打印变量的值, unlet 销毁变量。 对于 Vim 选项还可用 set 来更方便地操作,比如 set {option}, set no{option}, set {option}?。 普通变量可以直接引用,环境变量要加前缀 $、寄存器变量要加前缀 @、Vim 选项要加前缀 &。 变量默认作用域取决于定义的位置,函数内则为函数作用域,外部则为全局变量。 赋值和引用变量时可以使用 b:,g:,l:,t: 等前缀来指定要操作哪个作用域的变量。

在 Vim 中进行文件目录操作

Vim 剪切板 寄存器 快捷键

很多时候我们希望在Vim中可以操作文件和目录,例如备份当前文件、 重命名当前文件、创建和删除旧文件、创建和删除目录等。 这些操作在Bash中当然可以很好地完成,但退出Vim会丢失光标位置、Buffer等信息, Harttle当然希望在Vim中完成这些操作。 本文介绍文件和目录的增删改查,同时编辑多个文件请参考这几篇文章: Vim 多文件编辑:缓冲区 Vim 多文件编辑:窗口 Vim 多文件编辑:标签页

Vim 查找/替换/输入非可见字符

Unix Vim Windows 字符编码

在跨平台工作中由于不同编辑器处理换行和空白字符风格不一致, 常常在Vim下会看到一些特殊字符。 本文帮你解决不可见字符的查找、替换、输入等问题。

在 Vim 中优雅地查找和替换

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

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

Vim 中为 Markdown 配置回车展开

Markdown Vim Jekyll

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

Vim 寄存器完全手册

Linux Vim 寄存器

常见文本编辑器都会提供剪切板来支持复制粘贴,Vim 也不例外。 不同的是 Vim 提供了 10 类共 48 个寄存器,提供无与伦比的寄存功能。 最常用的 y 操作将会拷贝到默认的匿名寄存器中,我们也可以指定具体拷贝到哪个寄存器中。 一般来讲,可以用 "{register}y 来拷贝到 {register} 中, 用 "{register}p 来粘贴 {register} 中的内容。例如: "ayy 可以拷贝当前行到寄存器 a 中,而 "ap 则可以粘贴寄存器 a 中的内容。

Github Pages (Jekyll) 自动生成文章标签

Bash Github Vim grep awk sed JSON Jekyll

在Github Pages上写博客快三年了,为文章添加标签一直是一件困难的事情。 由于Harttle一直在Unix+Vim做开发和写博客, 所以写了一个『Bash脚本』来为文章生成标签列表, 并为Jekyll项目写了一点『Vim插件』,以便在编辑文章时一键生成标签。 为什么需要生成标签? 并不是所有人都有这样的困惑。对我来讲Jekyll最不方便之处就是『为文章添加标签』。 原因有二: 标签名不统一。同样的标签经常会因大小写、中英文、连字符等原因被识别为不同标签。 提取标签困难。写完文章后需要仔细挑选标签,并参考以往的文章标签, 这一过程在标签变多时非常困难。 用怎样的策略生成标签? 既然这件事情一定要自动化,那么用怎样的逻辑生成标签呢? 想到提取标签,第一印象便是统计词频。 然而词频最高的词语往往是语言表述相关的东西,但它们不是文章的重点。 下面将会看到我们需要一个标签库、一个Bash脚本、再加一个Vim插件。

在 Vim 中全文检索

Vim Vundle grep 快捷键

Ag(The Silver Searcher)和Ack都是 CLI 的全局搜索工具,其中Ag更快一些,而Ack也比Vim自带的grep快很多。这些工具的Vim插件可以通过Vim Quickfix窗口来提供代码搜索的结果。 本文便来详细介绍如何在Vim中使用Ag全局搜索。 那么什么是Quickfix窗口呢? Quickfix是Vim的一个特殊编辑模式,该模式的提出最初是受启发于Aztec C编译器: 把编译错误写入一个文件中,然后从这个文件一一跳转到对应出错的源文件。

打造前端开发的 Vim 环境

CSS HTML JavaScript Vim YCM Syntastic

前不久harttle着手搭建了类似IDE的Vim环境,然而对于前端开发者这还远远不够。 本文便记录一下如何实现前端开发者关心的那些特性:不同文件类型的缩进、HTML标签匹配注释移除、HTML/CSS/Javascript自动补全、代码风格检查等等。让我们来打造一个适合前端开发的Vim!

用 Cron 定时任务更新壁纸

HTML Linux Unix Vim awk crontab grep sed

最近看到Set Desktop to NASA Astronomy Picture of the Day一文,这个OSX下的Automator脚本可以每天自动去NASA(美国宇航局)下载“每日一图”,并设置为桌面。居然有这么酷的事情!于是harttle按照这篇文章的指示,完成了这个脚本。 第二天早上发现壁纸自动更新时harttle真是兴奋不已,然而第三天壁纸却没有更新… harttle也找不到Automator的日志在哪里,后来发现日历中的Automator触发器失效了?无奈之下,harttle又回到了Linux Way:使用 Cron 定时任务更新壁纸。现在稳定多了!

Vim 多文件编辑:缓冲区

Bash Linux Vim 内存

感谢[idear][idear]网友的支持,现在把"Vim多文件编辑"的最后一篇文章更新上来了!本文介绍Vim下缓冲区(Buffer)的使用, 至于标签页(tab)、窗口(window)可以移步另外两篇文章: Vim 多文件编辑:标签页和Vim 多文件编辑:窗口

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 多文件编辑:标签页。先上图:

Vim 多文件编辑:标签页

Vim Bash Linux 快捷键

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

Vim 中如何快速移动光标?

Bash Linux Unix Vim 快捷键

Vim 最大的特征与最大的困难就是键盘操作,所以快速移动光标是 Vim 的最基本技能。光标移动可以配合其他快捷键使用,比如 y, x, d, v,更好地掌握了光标移动也就更好地掌握了其他编辑技能。

优雅地使用命令行:Tmux 终端复用

Bash GNU Linux Node.js Session Tmux Vim 快捷键

你是否曾经开过一大堆的 Terminal?有没有把它们都保存下来的冲动?Tmux 的Session就是做这件事情的! 你可以随时退出或者进入任何一个 Session。每个 Session 有若干个 Window,每个 Window 又可以分成多个窗格(Pane)。 极大地满足 Terminal 用户的需求。 此外即使 iTerm/Terminal/Konsole 意外关闭也没关系,因为 Session 完全保存在 Tmux Server 中。 再次打开 Terminal 时只需 tmux attach 便可回到你的工作区,就像从未退出过一样。 如果希望重启电脑后仍然生效,你可能需要 动手写脚本 或者 使用插件。

如何用Vim搭建IDE?

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

一年前我从Vim切换到了WebStorm,是因为WebStorm强大的重构功能,以及Super Search功能。涉及多文件编辑和重构时WebStorm的优势便非常明显。 最近到手了HHKB,从键盘到触摸板的切换还是挺麻烦的,于是Vim编辑的需求又来了。。加之WebStorm经常假死,我决定重新启用Vim。同时重新打造了我的Vim,使它能够满足我在IDE中的所有需求。这篇文章便来记述整个过程,或许有些帮助。先上图:

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

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

我是坚定的 Vim 党,因为和命令行的集成如此之好,Vim 可以解决任何问题。然而在这个世界上,即便是最好用的工具也是需要配置的。 由于最近在写 C++,经过一番配置后,小编写 C++ 已经感到非常爽了,于是决定用一篇文章来记录如何打造一个适合写 C++ 的 Vim 编辑器! 包括 C++ 的自动补全、括号引号匹配、格式化、注释、编译运行快捷键等。 如果你还不了解 Vim 基本操作和配置方法,请参考 Vim 初级:配置和使用。 如果你和 Harttle 一样也做前端开发,可以参考 打造前端开发的 Vim 环境

感受Vim的强大:进阶技巧

Bash Markdown Unix Vim 寄存器 快捷键

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

TEX 学习笔记

Bash LaTeX Linux Makefile Markdown UTF-8 Vim Windows 字体 编译 快捷键

小编本科在物理学院用过不少laTex,而今全面转向Web的同时排版工具也全面转向Markdown了。将laTex的使用心得以及大小坑记录在此以备后用。 编译器 Windows 安装CTEX,可很好地支持各种编译器并获得良好的中文支持。 Linux 安装 texlive。 arch: texlive-core texlive-bin texlive-langcjk texlive-latexextra ubuntu: texlive texlive-xetex texlive-lang-cjk Startup 安装好TEX编译器后已经使用gbsn,gkai等字体,但这些字体库不全。可以编译简单的中文: \documentclass{article} \usepackage{CJKutf8} \begin{document} \begin{CJK}{UTF8}{gkai} 我是楷体 \end{CJK} \begin{CJK}{UTF8}{gbsn} 我是宋体 \end{CJK} \end{document} 使用 xelatex 编译,可以方便地编译中文。首先,在导言区添加: \usepackage[cm-default]{fontspec} 然后在文档中添加: \setmainfont[Mapping=tex-text]{WenQuanYi Micro Hei} %for beamer: \setsansfont[Mapping=tex-text]{WenQuanYi Micro Hei} 为了能够在Linux中使用 windows 字体,首先拷贝字体到用户的字体库: cp -r $win_dir/Windows/Fonts ~/.fonts/winfonts 然后更改 xelatex 字体映射: 打开/usr/share/texlive/texmf-dist/tex/latex/ctex/fontset/ctex-xecjk-winfonts.def; 将这里指定等win字体更改为系统中存在的字体(使用 fc-list查看),如SimSun, KaiTI等

Vim 初级:配置和使用

Vim Bash Unix sed 编译

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