繁体   English   中英

使命令仅在Vim中的某些情况下运行

[英]Making a command only run in certain cases in 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 () {
});

这样的模式将是,如果以for|switch|if|else|if elsefor|switch|if|else|if else (或其他任何东西))开始,或者如果在同一行上有一个: ,则为否。

我真的不知道在哪里看。

您可以尝试mapping with <expr>

我编写了一个函数,该函数返回带或不带Semi的所需映射。

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作为示例。 您可以添加其他关键字并进行测试。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM