我最近在朋友的要求下切换到Vim,因为Sublime Text 2认为它不相信已安装模块,即使它是......我离题了。
我已经成功设置了一些东西来编辑Python(目前我唯一的语言)更容易。但是,Sublime中缺少一个功能。它会自动在需要它们的行的末尾添加冒号(函数定义的开头,if语句等)。这阻止了无数令人讨厌的错误,我想念它:P
我想知道是否有某种命令可以放入.vimrc来执行此操作。
一个例子:
如果要键入def
,我希望vim自动插入冒号以使其成为def :
并将光标放在冒号之前,以便我输入我的函数名。
如果我在任何方面都是愚蠢的,那就欢呼和道歉。
答案 0 :(得分:8)
而不是像@CG Mortion的答案那样使用imap
,我强烈建议您使用iabbr
来代替这些小修补。
使用imap
你永远无法在插入模式下键入“define”,除非你在按下'd','e'或'f'之间暂停,或者做了其他一些hacky之一防止映射发生的事情。使用iabbr
时,只有在按下非关键字字符时才会展开缩写。 iabbr def def:<left>
完全符合您的预期,并且没有imap
s的缺点。
正如其他答案中所提到的,我还建议您在确定需要更复杂的内容后继续使用代码段引擎。它们非常强大,可以节省您的时间。
答案 1 :(得分:6)
查看the old snipmate,the new snipmate和ultisnips。这些插件提供了大致相似的“片段扩展”机制,模仿TextMate的系统。
答案 2 :(得分:1)
此snippet并不完全符合您的要求,但它可能对您有用。
基本上,当你按 Enter 时,它会在一行的末尾添加一个分号(如果该行以预定义的单词开头,并且冒号还没有)。
inoremap <cr> <c-r>=ColonCheck()<cr><cr>
fun! ColonCheck()
if getline(".") =~ '^\s*\(if\|else\|elif\|while\|for\|try\|except\|finally\|class\|def\)\>.*[^:]\s*$'
return ":"
else
return ""
endif
endfun
答案 3 :(得分:0)
这是一个相当hacky的答案,但你可以做一个简单的映射,如:
inoremap def def :<Esc>i
这将完全符合您的要求。也就是说,当你键入'def'时,它会将其解释为'def:',然后退回到正常模式(这里你可以移动一下),然后返回插入。
这也有效:
inoremap def def :<Left>
问题当然是它会在出现时替换defs,这是不理想的。
答案 4 :(得分:0)
Simlar问题:https://stackoverflow.com/a/6950427/875064
augroup PythonProgramming
au BufNewFile,BufRead,BufEnter *.py iabbr def def:<left>
augroup END