让命令只在特定情况下在Vim中运行



我想弄清楚如何让这个命令只在某些情况下运行:

au BufNewFile,BufRead *.js imap <buffer> {<cr> {<cr>}<c-o>O<Tab><Down>;<Up>

例子:

// No!
if () {
}
// YES!
foo.x = function () {
};
// YES!
var x = {
  // NO!
  y: function () {
  }
};
// YES!
foo(function () {
});

所以模式将是,NO半,如果它以for|switch|if|else|if else(和其他任何东西)开头,或者如果在同一行上有:

我真的不知道该去哪里看

你可以试试mapping with <expr>

我写了一个函数,它返回您需要的映射,无论是否有半字符。:

fun! Mapping()
    return "{<cr>}<c-o>O<Tab><Down>".(getline('.') =~# '^s*fors|ifs|elses'||getline('.') =~# ':'? '' : ';')."<up>"
endfunction

那么你可以把这个映射添加到你的au

inoremap <buffer> <expr> {<cr> Mapping()

请注意,我没有把所有的关键字放在行中,我只是添加了if else for作为示例。您可以添加其他关键字并测试。

最新更新