vim/gvim中%!column -t格式化失效,反而过滤行并弹出column窗口
问题根因
你遇到的是Windows环境下column命令的同名冲突问题:Windows系统自带C:\Windows\System32\column.exe工具,功能是调整控制台窗口的列布局,并不是你需要的GNU文本格式化column工具。调用系统自带工具时就会弹出你截图里的设置窗口,工具执行结束后没有输出文本到vim,所以原行内容会被清空。
你之前功能正常大概率是此前安装了Git for Windows、MSYS2、Cygwin等带GNU工具链的环境,且环境变量中GNU工具的目录优先级高于系统目录,现在优先级被修改或是GNU工具被卸载才会触发故障。
排查步骤
- 打开gvim执行命令
:!where column,查看输出的第一个路径是否为C:\Windows\System32\column.exe,如果是即可确认是命令冲突问题。 - 排除配置改动影响:暂时重命名你的
.gvimrc文件后重启gvim,再次运行%!column -t测试,如果故障消失则排查.gvimrc中是否新增了和过滤命令、column相关的自定义映射。
修复方案
- 方案一(快速生效,无需改环境变量)
直接指定GNU版column的完整路径调用,如果你用的是Git自带的GNU工具,命令写法参考:
嫌每次写路径麻烦可以在%!'C:\Program Files\Git\usr\bin\column.exe' -t.gvimrc中加快捷键映射:" 按<leader>ct一键格式化全表 nnoremap <leader>ct :%!'C:\Program Files\Git\usr\bin\column.exe' -t<CR> " 按<leader>cr格式化选中的行范围 vnoremap <leader>cr :!'C:\Program Files\Git\usr\bin\column.exe' -t<CR> - 方案二(全局生效)
调整系统环境变量顺序,把包含GNUcolumn的目录(比如Git的usr/bin目录、MSYS2的bin目录)上移到C:\Windows\System32之前,修改完成后重启gvim即可生效。 - 方案三
如果你已经卸载了GNU工具链,重新安装Git for Windows或者MSYS2即可默认获得文本格式化版的column工具。
内容的提问来源于stack exchange,提问作者rawat89
相关产品推荐
相关产品推荐

