9

だからここに私の問題があります。Python ファイルがあり、最後の行のように非常に長い行を入力しているとします。

class SomeClass(object):
  def some_method(self):
    some_variable = SomeOtherClass.some_other_method(some_parameter=some_value)

これを Vim で入力すると、次のようになります。

class SomeClass(object):
  def some_method(self):
    some_variable =
    SomeOtherClass.some_other_method(some_parameter=some_value)

それはスタイルが悪いだけでなく、PEP8 を壊します。私がしたいことは次のとおりです。

class SomeClass(object):
  def some_method(self):
    some_variable = SomeOtherClass.some_other_method(
        some_parameter=some_value)

これはPEP8と一致しています。(この議論では、インデントの動作ではなく、改行の動作にのみ関心があります。)

編集: 行の表示方法を制御するためbreakatに と組み合わせてのみ機能します。厳密な改行がどこに挿入されるかを決定するためlinebreakに と組み合わせて (明らかに) 機能しません。textwidthしたがって、以下の私のアイデアは機能しません...

驚いたことに、他の人がこの問題を共有していることを示すものは何も見つかりませんでした。(それにもかかわらず、私の考えは、キャラクターを設定に追加することでしたbreakat(私がいる間と一緒[{)。

私はこれを試しました; の出力は次の:set breakatとおりです。

breakat= ^I!@*-+;:,./?([{

しかし、それは無駄です。私が何をしようとも、Vim は上記の "=" の後にブレークすることを主張します。長い関数名でも同じ問題があり、 の直後に壊れますdef

これが私の .vimrc の完全な内容です:

set nobackup
set nowritebackup
set noswapfile
set columns=80
set tabstop=4
set shiftwidth=4
set softtabstop=4
set autoindent
set smarttab
set smartindent
set textwidth=80
set wrap
set breakat=\ ^I!@*-+;:,./?\(\[\{
filetype indent on
filetype on
filetype plugin on

(これを理解しようとする目的でプラグインなどをインストールしていません。)

Vim を私の breakat 設定に従わせる方法、またはこの動作に対処する最善の方法についての他の考えを誰かが知っていますか?

4

1 に答える 1

3

改行を設定していません。それがないと、vimはbreakat変数を無視します。詳細とvimの良さについてはこちらをご覧ください。また、改行を壊すため、nolistを設定する必要があることに注意してください。

ここでワードラップを扱っている別のブログ投稿。これは、一部のファイルタイプがフォーマットオプション「t」フラグを自動的に含まないことに注意してください。これがないと、自動ラッピングは発生しません。

最も簡単なことは、実行するマッピングを追加することだと思います:%! pythonTidypythonTidyは、Pythonで、stdInでPythonコードを取得し、きれいなバージョンをstdOutに出力するためのスクリプトです。そのマッピングを使用すると、現在のファイルで実行し、内容全体を再フォーマットされたバージョンに置き換えることができます。Pythonファイルで挿入モードを終了するたびにこれを実行する自動コマンドを追加すると、設定する必要があります。

于 2011-10-05T13:34:42.740 に答える