2

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

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 () {
});

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

我真的不知道在哪里看。

4

1 回答 1

1

你可以试试mapping with <expr>

我写了一个函数,它返回你需要的映射有或没有半。:

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

那么您可以将此映射添加到您的au

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

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

于 2013-05-18T21:07:06.207 回答