Nonaktifkan perataan otomatis untuk kode Python di emacs

3

Saat ini, dalam kelanjutan garis python-mode emacs disejajarkan dengan akhir baris sebelumnya, sebagai berikut:

this_is_a_list_of_django_urls = ('',
                                 url(r'^admin/?', include(admin.site.urls)),
                                 url(r'^polls/?', include('polls.urls'))
                                )

Tapi saya menemukan hal di atas sangat jelek. Apakah ada cara untuk mengkonfigurasi python-mode emacs ke autoindent seperti ini:

this_is_a_list_of_django_urls = ('',
    url(r'^admin/?', include(admin.site.urls)),
    url(r'^polls/?', include('polls.urls'))
)

Saya menemukan versi kedua lebih mudah dibaca, jadi saya ingin menekan TAB hanya dengan indentasi satu tingkat, daripada seberapa banyak yang diperlukan untuk menyelaraskan dengan akhir baris sebelumnya.

quanticle
sumber
Itu sebenarnya permintaan yang menarik, dari kode saya tidak melihatnya dapat dikonfigurasi sekarang, Anda dapat mengirim permintaan fitur ke emacs-devel. M-x report-emacs-bug.
kindahero
Anda harus menerima solusi Andreas dan memberikan tanda kutip pada baris yang terpisah juga. Kemudian emacs akan membuat indentasi mereka tanpa sejajar.
Zelphir Kaltstahl

Jawaban:

2

PEP8 mengatakan:

Tidak:

Argumen di baris pertama dilarang saat tidak menggunakan perataan vertikal

foo = long_function_name(var_one, var_two,
    var_three, var_four)

WRT menutup tanda kurung python-mode.el sementara itu menawarkan pilihan, boolean `py-close-at-start-kolom-p ', standarnya adalah nihil.

Ketika non-nil, itu akan berbaris di bawah karakter pertama dari baris yang memulai konstruksi multi-baris, seperti pada:

my_list = [
    1, 2, 3,
    4, 5, 6,
]
Andreas Röhler
sumber
Menunjukkan bahwa PEP8 memiliki sisi baiknya. Saya sudah melakukan itu selama bertahun-tahun, rasanya wajar bagi saya untuk indentasi dengan cara ini. Saya bertanya-tanya bagaimana orang dapat berpikir bahwa versi yang selaras dengan parameter pada baris pertama lebih baik. Mengapa memperlakukan beberapa parameter berbeda dari yang lain?
Zelphir Kaltstahl
1

Bukan solusi, sungguh, tetapi jika Anda menempatkan elemen pertama tuple pada baris baru, Anda mendapatkan hampir perilaku yang Anda inginkan di luar kotak.

this_is_a_list_of_django_urls = (
    '',
    url(r'^admin/?', include(admin.site.urls)),
    url(r'^polls/?', include('polls.urls'))
    )
Inaimathi
sumber