2008-12-12 37 views
29

Gần đây tôi đã thử chuyển từ sử dụng python-mode.el sang python.el để chỉnh sửa các tệp python trong các emacs, tìm thấy trải nghiệm một chút lạ lùng và không hiệu quả và phát hiện lại. Tôi đã sử dụng python-mode.el cho một cái gì đó như mười năm, vì vậy có lẽ tôi là một chút thiết lập theo cách của tôi. Tôi muốn được nghe từ bất cứ ai đã đánh giá cẩn thận hai chế độ, đặc biệt là những ưu và khuyết điểm mà họ cảm nhận được và cách công việc của họ thường tương tác với các tính năng cụ thể cho python.el.Chuyển từ python-mode.el sang python.el

Hai vấn đề lớn đối với tôi với python.el

  1. Mỗi đệm thăm một file python bị kém vỏ python tương tác của riêng mình. Tôi đang sử dụng để phát triển trong một trình bao tương tác và chia sẻ dữ liệu giữa các tệp python. (Có vẻ như thực hành không tốt từ góc nhìn kĩ nghệ phần mềm, nhưng tôi thường làm việc với các bộ dữ liệu khổng lồ mất một thời gian để nạp vào bộ nhớ.)

  2. Hỗ trợ chế độ khung trong python.el, dường như hoàn toàn không hợp lý (cú pháp của python làm cho tự động hóa như vậy không cần thiết) và thiết kế tồi tệ (ví dụ, nó không có kiến ​​thức về "for" biểu thức trình tạo vòng lặp hoặc "<expr 1> if <cond> else <expr 2>" biểu thức, vì vậy bạn phải quay lại và xóa dấu hai chấm một cách hữu ích chèn sau khi nhấn mạnh rằng bạn nhập các mệnh đề biểu thức trong minibuffer.) Tôi không thể tìm ra cách tắt nó đi. Có một biến số python.el xác nhận quyền kiểm soát điều này, nhưng dường như nó không hoạt động. Có thể là phiên bản python.el Tôi đang sử dụng đã bị hỏng (nó đến từ gói debian emacs-snapshot) vì vậy nếu có ai biết về phiên bản cập nhật của nó, tôi muốn nghe về nó. (Tôi đã có cùng một vấn đề với phiên bản trong các emacs CVS khoảng 2 tuần trước.)

+5

Bạn không nói lý do tại sao bạn thử chuyển sang python.el. Điều gì tốt về nó? – ShreevatsaR

Trả lời

1

python-mode.el được viết bởi cộng đồng Python. python.el được viết bởi cộng đồng emacs. Tôi đã sử dụng python-mode.el cho miễn là tôi có thể nhớ và python.el thậm chí không đến gần với các tiêu chuẩn của python-mode.el. Tôi tin tưởng cộng đồng Python tốt hơn cộng đồng Emacs để tìm ra một tệp chế độ phong nha. Chỉ cần dính với python-mode.el, có thực sự là một lý do không?

+17

Cảm ơn ý kiến ​​của bạn, nhưng nó khá độc đoán. Tôi đang tìm kiếm một so sánh các tính năng của gói, trên một mức độ thực tế. Tôi không quan tâm đến các thông tin nhận thức của tác giả. –

4

Đối với những gì nó có giá trị, tôi không thấy hành vi mà bạn đang gặp trong số 1, "Mỗi bộ đệm truy cập vào tệp python sẽ có trình vỏ trấu tương tác kém hơn."

Đây là những gì tôi đã làm bằng cách sử dụng python.el từ Emacs 22.2.

Cx Cf foo.py [chèn: print "foo"]

Cx Cf bar.py [chèn: print "bar"]

Cc Cz [* Python * đệm xuất hiện]

Cx o

Cc Cl RET [ "bar" được in trong * Python *]

Cx b foo.py RET

C-c C-l RET ["foo" được in trong cùng một bộ đệm * Python *]

Do đó hai tệp đang chia sẻ cùng một vỏ trăn kém. Có lẽ có một số tương tác không lường trước giữa các tùy chỉnh cá nhân của bạn về chế độ python và các hành vi mặc định của python.el. Bạn đã thử sử dụng python chưa.el mà không có tùy chỉnh .emacs của bạn và kiểm tra nếu nó hoạt động theo cùng một cách?

Tính năng bổ sung chính của python.el trên chế độ python là hàm hoàn thành biểu tượng python-complete-symbol. Bạn có thể thêm một cái gì đó như thế này

(define-key inferior-python-mode-map "\C-c\t" 'python-complete-symbol) 

Sau đó gõ

>>> import os 
>>> os.f[C-c TAB] 

bạn sẽ nhận được một lần hoàn * * buffer chứa

Click <mouse-2> on a completion to select it. 
In this buffer, type RET to select the completion near point. 

Possible completions are: 
os.fchdir       os.fdatasync 
os.fdopen       os.fork 
os.forkpty       os.fpathconf 
os.fstat       os.fstatvfs 
os.fsync       os.ftruncate 

Nó sẽ làm việc trong bộ đệm tập tin py quá.

+3

Sử dụng python.el từ gói emacs-snapshot trong Ubuntu 8.04 (Emacs 23), tôi dường như không có chức năng biểu tượng hoàn chỉnh python. –

+1

Thông tin trong câu trả lời này đã lỗi thời với Emacs 24.1.50. Các defun ở trên đã được gỡ bỏ và thay thế bằng 'python-completion-complete-at-point' và vài cơ chế hoàn thành khác. Tôi không quá rõ ràng về cách làm việc này, nếu không tôi sẽ chỉnh sửa câu trả lời. – suvayu

1

python-mode.el không hỗ trợ chuỗi được trích dẫn ba lần, vì vậy nếu chương trình của bạn chứa tài liệu dài, tất cả các màu cú pháp (và các tính năng cú pháp liên quan) có xu hướng bị hỏng.

tôi .02

+0

Tôi chỉ thử điều này với phiên bản python-mode.el 5.1.0 và không thể tái tạo nó: docstrings hoạt động tốt với việc khóa phông chữ. Tôi không nghĩ rằng một lỗi như thế này sẽ có mặt trong một thời gian dài trong * chế độ python chiếm ưu thế cho Emacs, docstrings ở khắp mọi nơi, ai đó đã có thể nắm bắt được hành vi xấu khá sớm. – paprika

+0

Ah! * Bây giờ * Tôi biết ý của bạn là gì ... Tôi vừa phát hiện ra lỗi này trong một docstring: quoting * bên trong * một docstring thực sự làm nổi bật cú pháp tô sáng. – paprika

+1

@ paprika, @ Gyom: FWIW, có vẻ như vấn đề về chuỗi ba trích dẫn đã được giải quyết trong [5.2.0] (https://launchpad.net/python-mode/+milestone/5.2.0). –

3
  1. tôi không thể tái tạo hành vi này trên Emacs v23.1, điều này phải được thay đổi kể từ đó.

  2. Hãy quên hỗ trợ bộ xương của bất kỳ chế độ nào và sử dụng siêu cao cấp và mở rộng yasnippet thay vào đó, nó thực sự đáng để thử!

2

Lưu ý gần như mọi thứ được nói ở đây đều lỗi thời khi mọi thứ thay đổi.

Lệnh python-mode.el có tiền tố "py-" về cơ bản, bạn sẽ có thể sử dụng lệnh từ cả hai, bất kể lệnh nào đã được tải trước.

python-mode.el không dỡ bỏ python.el; bên cạnh python-mode-map, được định nghĩa lại.

Sự khác biệt nằm trong trình đơn được hiển thị và cách đặt khóa, lần cuối cùng được tải sẽ xác định.