
使用 Vim 官方网站的字典下载链接
下载字典:
下载页面:http://www.vim.org/scripts/script.php?script_id=195, 当前下载链接为 http://www.vim.org/scripts/download_script.php?src_id=6351
解压缩所需字典文件
tar xzvf ~/Downloads/engspchk.targ.gz CVIMSYN/engspchk.dict
使用 Vim 整理成字典文件
vim CVIMSYN/engspchk.dict
删除前面三行:
gg3dd
删除行首 GoodWord单词::%s/^GoodWord\t//g
整理成每个单词占一行:%s/\t/^M/g,^M的输入要用ctrl-v再按回车键,也可以用ctrl-v-m来输入^M.
删除最后一行:Gdd
排序::sort现在的 engspchk.dict 中文件每一行只有一个单词,并且按字母排好了序的 Read More
- 本人所用的键盘是 WASD VP3 61 Key 的 -- Poker 3 方案,可以不借助于软件直接键盘上设置为 Caps + hjkl 来作为方向键。Caps 跳线为 Fn, 并选择一个 Layer, 把原本 Fn + ijkl 的方向键组合键重新映射为 Fn + hjkl 即可。
办公室的 61 键的键盘借于朋友体验,所以又重新把 DAS 87 键摆了出来。由于习惯了 61 键的 Caps + hjkl 的方向键,在 87 键盘上每次按方向键时右手都要离开它的 Home Row,很是不爽。别说是 87 键,即便是有些键盘把方向键压缩在右 Shift 下方,都无法接受右手右下移去按方向键。
Caps 键没什么卵用(只会用 Caps 来输入大写字母的当我没说),却常年占据着黄金位置(左手掌无需移动就能按到),所以主意是如何把 Caps 另作他们,对于 Vimer 来说最理想的方向键是 Caps + hjkl。
Mac 下有个键盘映射的工具 Karabiner, 先前的版本 KeyRemap4MacBook 只支持到 Mac OS 10.8, 而 Karabiner 也只能支持 10.9 到 10.11。而我的 Mac 系统是 macOS Sierra 10.12, 有一个不完全特性的 Karabiner 叫做 Karabiner-Elements, 它不能像 KeyRemap4MacBook 和 Karabiner 那样支持直接组合键的映射。因此在 macOS Sierra 一直未能把方向键映射成某个功能键(如 Caps) + hjkl,不得不用物理方向键。
有两种方法把 Caps + hjkl 映射为方向键
Read More
一路阅读完第五章直接跳跃到第十章有关宏的内容,宏的录制和回放功能是多数编辑器都会提供,但我却基本不用这一功能。在 Vim 中宏比点号(.) 更有效的处理重复性操作,既然作为一个 Vimer, 以重复操作为耻,因而十分有必要对它加以了解和掌握的,又是一个一分钟上手需一辈子来掌握的东西。
1. 宏是录制在某个寄存器中,用 q{register}启动录制,例如qa, 然后执行一系操作,再次按q结束录制,第一次回放用@{register}, 如@a,以后多次执行上一次宏回放可用@@.也可以支持数字,如10@a, 或10@@.:reg a可查看寄存器a中宏的内容
2. 录制宏的一条金律是:确保每一条命令是可重复的。h,j,k,l, 没什么意义,而0e,A,I就是可重复的。当回放宏时遇到光标移动失败时, 如光标已在行首,宏中有h操作,那么后续的操作被放弃,根据visualbell配置可能有响声提示。宏的 motion 失败即放弃的特性让我们在重复执行宏时可以用一个足够大的数字,如200@@, 反正无副作用
3. 宏的序列执行与并发执行,当用5@a执行宏"a 0f.r)w~j, 其实是把宏放在一个队列里,往下跳行执行,其他任何一行执行失败,后续行将得不到更新。如果针对宏"a 0f.r)w~, 对选择的多行执行:'<,'>normal @a时效果就不一样了,它的意思是针对选择的多行单独执行宏,任何行的失败互不影响,所以它是并发执行的 Read More
1. 学习完前面的三大模式:正常模式,插入模式和可视模式后,现在步入了命令模式。
:,/或?, 和<C-r>=分别进入到Ex命令,搜索和表达式,它们都被称作命令模式, 以前还常常把正常模式说成是命令模式。:后的是Ex命令,是因为我们仍然沿袭了 Vim 的前身 Ex。我在 Mac 下输入命令ex就会看到这个
进入到 Vim 的 Ex mode, 输入
visual命令就是正常的 Vim 界面。Vim 之于 Ex 就像 Gui 之于 Shell, Vim 的 Ex 命令可以做任何操作,见:h ex-cmd-index。2. 命令模式在
:提示符下输入时可以使用插入模式下的很多命令,如<C-w>,<C-u>,<C-k>,<C-v>,<C-r>{reg}, 甚至是<C-r>=,就是不能用 motion 命令,光标移得靠方向键3. 在阅读本章之前对 Vi 的命令模式只能用不觉明厉来形容,它对我的贡献仅仅是
:wq之类的,模式查找,简单替换,再就是执行一些未设置快捷键插件功能。也一直未理解替换怎么是%s/abc/dev, 只是依葫芦画瓢,现在终于可以在本章中理解那些命令了。从中真的能体会到 Ex 命令模式的乐趣,Ex 是不会把整个文件内容显示在屏幕上的, Ex 命令通常由 范围 + 命令 组成。:2 -- 光标跳到第一行,正常模式下可以 2G, 或 2gg
:print -- 打印当前行的内容范围和命令一般会写在一块,范围可借用同样意义的特殊字符,默认操作当前行,因此下面一系列的命令就好理解了 Read More

1. Vim 的模式: 通常我们说有三种模式,正常模式(Normal Mode), 插入模式(Inert Mode) 和可视模式(Visual Mode). 其实除此之外还有
4) Operator-Pending Mode: 就是正常模式下按下操作(Operator) 指令(如 c, d 等) 后,等待输入移动(Motion) 指示时的模式。这时 Escape 或 Motion 指令后退回到正常模式
5) Insert Normal Mode: 在插入模式时,按下<Ctrl-o>组合键后进入该模式, 此时可接受一个 Action (Operator + Motion = Action), 比如3dd, 然后自动返回到插入模式。<Esc>也能从 Insert Normal Mode 返回到插入模式。这方便了插入模式只想执行一次指令操作时来回切换, Insert Normal Mode 在 Vim 的状态栏中显示为下图那样 - NORMAL --(insert) --
6) 替换模式(Replace Mode)
-- REPLACE --,R会进到替换模式,随后输入往后覆盖,可尝试<Insert>键;r{char}和gr{char}临时进入单字符的替换模式,替换完当前字符立即退到正常模式,也就是光标不往下走。
7) 可视替换模式(Visual Replace Mode)-- VREPLACE --, 用gR进入该模式,在处理tab字符时会更友好,还有别的好处吧,所以该书建议尽量用可视替换模式。
8) 可视模式(Visual Mode),这就复杂了。它有三个子模式:
character-wise Visual mode---- VISUAL;
line-wise Visual mode---- VISUAL LINE --
block-wise Visual mode---- VISUAL BLOCK --
9) 选择模式(Select Mode),可视模式下选择了内容后用<C-g>可在两种模式下切换,状态栏-- VISUAL --和-- SLECT --的不同,还有选择模式下直接输入就会替换当前的内容,与其他编辑器的行为一样,而可视模式需要按c来替换当前内容。 Read More
Vim(Vi Improved) 早已替代了 Vi, 它存在于大多数的 Linux 发行版中。所以基本上 Vi 和 Vim 在你的系统中就是同一个程序,我用的 Mac, vi 命令就是一个指向到 vim 的链接
ls -l $(which vi)
lrwxr-xr-x 1 root wheel 3 Sep 20 23:47 /usr/bin/vi -> vimmacOS Sierra 自带的 Vi/Vim 版本仍然是 7.4,我用
Read Morebrew install macvim安装了最新版的 Vim 8.0, 由于只想启动 MacVim 控制台的 Vim, 所以把 vi/vim 命令链接到新版 Vim 上。
Vim 的东西时而学一点,但很快又会忘记,就是最简单的 h, j, k, l 来移动光标都会有所迟疑,因为一直未强迫自己完全脱离方向键来使用 Vim,下个目标是 87 键的键盘都嫌多,打算入一个 61 键的 WSAD 键盘, HHKB 还是有些极端了。

找到了一本学习 Vim 的好书 《Practical Vim》第二版,阅读时把对自己有用的东西仅当笔记记下来备忘,这个其实更应该记录在我的 Evernote 中作为私有笔记。重点的东西我在书中注解了,这里的笔记只能算是一个补充。 Read More
用 Java 进行编码基本还是离不开 IntelliJ IDEA 或 Eclipse, 看别人完全用 Vim 进行 Javascript 项目编程很是眼红,估摸着能不能把 Vim 打造成一个更强的 Java IDE。语法高亮是不在话下,最主要是给它加上自动完成功能,不光对当前类,项目中的方法或变能能提示,而且必须像 Java IDE 那样理解所有的项目依赖。这就是今天试用的一个 Vim 插件 vim-javacomplete2,另种可能更好的方案 YouCompleteMe + Eclim 还会再研究。
提到 Vim 的自动完成功能,有必要了解 Vim 自带的提示功能- ctrl - n/p: Vim 根据当前缓冲区的关键字来提示,像 Sublime 或 Visual Studio Code 中的关键字提示
- ctrl - x 进行自动自动完成模式,接着一些操作如 ctrl - l/n/t/i 完成类似于 ctrl - n/p 的操作; ctrl - k 能基于字典自动完成,完整按键是 ctrl - x ctrl -k
- ctrl - x ctrl - o, 这个单独拉出来,是使用 Vim 的 Omni Completion 功能来自动完成,因为将要用到的 vim-javacomplete2 就依赖于这个功能
除 YouCompleteMe 插件外,另外还两个 Vim 下的自动完成插件是 NeoComplete 和 VimCompleteMe。
摘要部分算是说完了,现在开始体验 vim-javacomplete2 对 Java 项目的自动完成功能。它所有完成的代码提示不仅要支持基本的 Java 类库, 当前项目的类, 手动添加的 jar 包 ,还能支持maven,gradle和 Eclipse 的.classpath文件中定义的 classpath, 这完全能应付我们实际中的项目了。实际运作也是一个 C/S 结构,这个插件会启动一个 javavi server, 用 javaparser 来解析依赖, 然后 Vim 中用 omnifunc 经 socket 连接到 javavi server 获得提示列表的。 Read MoreVim 自 7.0 开始支持 tab 页了,这就像很多数文本编辑器那样方便在多文件中切换,而不是只能使用 Buffer 暗地里来回切。默认时标签上显示 tab 序号加上当前打开的文件名。
注:Visual Studio Code 1.1.1 目前尚不支持 tab 功能。
Vim 中关于 Tab 的操作命令如下:
vim -p file1 file2 file3.... 在多标签中打开多个文件
:tabe[dit] 或 :tabnew 在当前标签后打开新的标签
:tabn[ext] 或 gt 切换到下一个 tab
:tabp[revious] 或 gT 切换到上一个 tab
:tabn [N] 切换到第 N 个 tab
:tabfir[st] 切换到第 1 个 tab
:tabl[ast] 切换到最后一个 tab Read More
Vi 中的光标操作是其他众多命令,如(d-delete, c-change, yy) 的基础。它犹如汇编中的寄存器/寻址方式,成为了许多 Vi 的初学者望而却步的一主要原因,特别是在某些系统版本的 Vi 中无法正常使用方向键移动光标的情况。那么好的习惯还是请试着用 h, j, k, l 来当方向键,对于键盘控来说,把手从字母上移动到方向键上去都是在浪费时间。
本来是想直接记录一下在 Vi 中怎么进行删除、修改操作的,然而却发现 Vi 的光标操作是无法逾越的一道沟。在这里,我会试着去理解每一个按键的更自然的意义,现在开始拉清单 Read More