VIM有助于理解X123X

时间:2014-03-03 10:47:23

标签: vim

我在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。

任何人都可以帮忙吗?

1 个答案:

答案 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)