9

私は最近、Sublime Text 2がモジュールがインストールされているとは思わないと判断した後、友人のリクエストでVimに切り替えました...私は逸脱します。

Python(現在は私だけの言語)の編集を簡単にするために、なんとか設定することができました。ただし、Sublimeに欠けている機能が1つあります。コロンを必要とする行の終わり(関数定義の先頭、ifステートメントなど)にコロンが自動的に追加されます。これは無数の迷惑なエラーを防ぎました、そして私はそれを逃します:P

これを行うために.vimrcに入れることができるある種のコマンドがあるかどうか疑問に思いました。

例:と入力する場合def、vimにコロンを自動的に挿入して作成しdef :、コロンの前にカーソルを置いて、関数名を入力できるようにします。

私がなんらかの形で愚かであるならば、歓声と謝罪。

4

5 に答える 5

8

imap@CG Mortion の回答が示唆するように s を使用するのではなく、この種の小さな修正には s を使用することを強くお勧めしますiabbr

を使用するimapと、「d」、「e」、または「f」を押す間に一時停止するか、マッピングが行われないようにするために他の多くのハッキーなことをしない限り、挿入モードで「define」と入力することはできません。省略形を使用iabbrすると、キーワード以外の文字が押されたときにのみ展開されます。 iabbr def def:<left>期待どおりに機能し、sの欠点はありませんimap


他の回答で述べたように、もう少し複雑なものが必要だと判断したら、スニペット エンジンに移行することもお勧めします。それらは非常に強力で、時間を大幅に節約できます。

于 2012-07-16T17:53:36.720 に答える
6

古い snipmate新しい snipmate、およびultisnipsを見てください。これらのプラグインは、TextMate のシステムをモデルにした、ほぼ同様の「スニペット拡張」メカニズムを提供します。

于 2012-07-16T15:08:57.030 に答える
1

このスニペットは、あなたが求めていることを正確に行うわけではありませんが、それでも役に立つかもしれません。

基本的に、 を押すと、行末にセミコロンが挿入されます (行が定義済みの単語で始まり、コロンがまだない場合) 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
于 2012-07-16T16:39:55.393 に答える
0

Simlar 問題: https://stackoverflow.com/a/6950427/875064

augroup PythonProgramming
   au BufNewFile,BufRead,BufEnter   *.py   iabbr def def:<left>
augroup END
于 2012-07-16T19:03:48.497 に答える
0

これはかなりハックな答えですが、次のような単純なマッピングを行うことができます。

inoremap def def :<Esc>i

これはまさにあなたが望むことをします。つまり、'def' と入力すると、'def :' と解釈され、通常モードに戻り (ここでは少し移動できます)、挿入に戻ります。

これも同様に機能します:

inoremap def def :<Left>

もちろん、問題は定義が現れるたびに置き換えられることであり、これは理想的ではありません。

于 2012-07-16T16:58:45.250 に答える