首页 > 解决方案 > 重新定义单词移动停止字符以在 Vim/GVim 中编辑 Clojure 代码

问题描述

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

clojure.core/select-keys

在这种情况下,我们希望wbword-motion 命令在任何非字母字符处停止。

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

标签: vimclojureclojurescriptmacvim

解决方案


答案是使用 Vim 功能autocmd来修改iskeywordClojure 文件的设置。具体来说,将这些行添加到您的~/.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,BufNewFile,BufRead *.clj* set iskeyword-=-
autocmd BufWinEnter,BufNewFile,BufRead *.clj* set iskeyword-=/

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


推荐阅读