You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Vim配置:仅当连字符-后接字母时才将其识别为单词组成部分

Vim 自定义连字符单词识别规则配置

Vim原生iskeyword选项仅按单个字符判定是否属于单词,无法识别-的上下文,因此默认配置下无法区分kebab-case连字符单词和->箭头运算符两种场景。以下两种方案可实现需求:

方案1:语法规则适配(代码场景推荐)

保留-为单词组成字符的配置,额外添加语法规则强制将->识别为独立运算符,断开其与前后标识符的关联即可,配置如下:

" 适配kebab-case命名,将-纳入单词字符范围
set iskeyword+=-
" 全局识别->为独立运算符,不受其他语法组规则影响
autocmd FileType * syn match ArrowOperator "->" containedin=ALL

配置生效后:

  • 在this-is-one-word开头执行dw,会一次性删除整个连字符字符串,符合连字符为单词组成部分的需求
  • 在$logger->info的logger位置执行dw,会识别到后续-属于独立的->运算符,不会将其纳入删除范围,最终得到$->info,保留箭头结构

该方案不修改原生按键映射,性能开销极低,适配所有带->运算符的编程语言文件。

方案2:自定义单词移动逻辑(全场景通用)

如果需要在纯文本、Markdown等非代码场景也使用该规则,可以通过正则自定义单词边界判定,覆盖原生的单词移动、操作逻辑:

" 向前移动单词时,在->的-前断开
nnoremap <silent> w :<C-u>call search('\(\k*\%(-\@!\|\%->\)\)\@=', 'W')<CR>
onoremap <silent> w :<C-u>call search('\(\k*\%(-\@!\|\%->\)\)\@=', 'W')<CR>
" 向后移动单词适配相同规则
nnoremap <silent> b :<C-u>call search('\%(\%(-<\@<=\|\k\)\@<=\k\+\)\@=', 'bW')<CR>

该配置通过正则做上下文判定:仅当-后不紧跟>时,才将-算作单词组成部分,一旦检测到-后为>,则将该-排除在当前单词范围外,全场景下都符合预期。

注意:如果已有其他单词相关的自定义映射,优先选择方案1避免冲突;仅在需要非代码场景适配时使用方案2。

内容的提问来源于stack exchange,提问作者David Oneill

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 01:21:32