重新定义用于在 Vim/GVim 中编辑 Clojure 代码的单词移动停止字符

问题描述

在 Vim/GVim 中编辑 Clojure 代码时,我经常使用 w word-motion 命令(以及它的表亲 b 用于反向移动 word-motion)。但是,在默认的 Clojure 配置中,Vim/GVim 会忽略常见的单词分隔符字符,例如连字符、斜杠和句点。以下 Clojure 符号显示了所有三个:

clojure.core/select-keys

在这种情况下,我们希望 wb 字动作命令在任何非字母字符处停止。

如何修改默认的 Vim 配置以识别 Clojure 中的这些单词边界?

解决方法

答案是使用 Vim 功能 autocmd 来修改 Clojure 文件的 iskeyword 设置。具体来说,将这些行添加到您的 ~/.vimrc 文件中:

" Remove the period `.`,hyphen,`-`,and slash `/` as keyword chars so "word" movement will stop 
" on these chars (i.e. in a namespace like `proj.some.long.ns.name` or a symbol like `my-clojure-sym`)
" Must do one at a time for 'string lists'
autocmd BufWinEnter,BufNewFile,BufRead *.clj* set iskeyword-=.
autocmd BufWinEnter,BufRead *.clj* set iskeyword-=-
autocmd BufWinEnter,BufRead *.clj* set iskeyword-=/

加载带有后缀 .clj* 的文件时,我们从 iskeyword 字符串列表中删除了句点、连字符和斜杠这三个字符,因此它们不再被识别为“关键字”的一部分.也就是说,它们变成了单词分隔符。然后,wb 字动作命令将停在那里,正如我们所寻求的那样。

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...