我在vim Wiki
中遇到了非常有用的VIM映射映射说:
map <F4> :e %:p:s,.h$,.X123X,:s,.cpp$,.h,:s,.X123X$,.cpp,<CR>
我想扩展它 - 例如cc / h文件
但我无法理解剧本。主要是X123X
按照模式,我刚刚这样做了:
map <F4> :e %:p:s,.h$,.X123X,:s,.cpp$,.h,:s,.X123X$,.cpp,:s,.cc$,.h,:s,.X123X$,.cc,<CR>
现在,它映射.CC-&gt; .H但不是来自.H-&gt; .CC,而是映射.H-&gt; .CPP。
任何人都可以帮忙吗?
答案 0 :(得分:3)
此映射使用特殊的:s
文件名修饰符(:help filename-modifiers
)来交换文件扩展名。
由于所有替换都是按顺序执行的,因此.h
扩展名首先会转换为.X123X
占位符值,以便以下.cpp
→.h
转换不适用它。
这个技巧适用于一对;如果你想添加备选方案,我宁愿切换到进行交换的Vim函数。
function! SwappedExtension()
let [rest, ext] = [expand('%:r'), expand('%:e')]
if ext ==? 'h'
let ext = 'cpp'
elseif ext ==? 'cpp'
let ext = 'h'
endif
return rest . '.' . ext
endfunction
:nnoremap <F4> :e <C-r><C-r>SwappedExtension()<CR><CR>
此外,有插件可以做到这一点,例如a.vim - Alternate Files quickly (.c --> .h etc)。