2013-07-12 118 views
27

Tôi mới sử dụng Python.Dòng lệnh Python: bỏ qua thụt đầu dòng

Nói tóm lại:

Trong kịch bản tôi liên tục muốn kiểm tra bit nhỏ và mảnh chương trình của tôi bằng cách sao chép/dán một số dòng (s) của mã từ soạn thảo văn bản của tôi vào dòng lệnh Python thông dịch viên. Khi các dòng này được thụt vào (ví dụ vì chúng là một phần của hàm), tôi muốn trình thông dịch bỏ qua hoặc không kiểm tra thụt đầu dòng để tôi không phải hủy liên kết trước khi sao chép/dán. Điều đó có thể không?

Trong biết thêm chi tiết:

Dưới đây là một ví dụ đơn giản về những gì tôi có nghĩa là:

Hãy nói rằng soạn thảo văn bản của tôi chứa các module sau đây hiện đang được phát triển:

def MyFunc(arg): 
    .../... 
    if arg == 1: 
     print "This is my function called with value 1." 
     print "Done." 
    else: 
     print "This is my function called with value other than 1." 
     print "Nothing else to say." 
    .../... 

Và giả sử Tôi chỉ đơn giản muốn kiểm tra 2 dòng print đầu tiên (dòng 4 và 5 của mã trên) ngay lập tức để kiểm tra nhanh nếu ít nhất một phần của mô-đun của tôi hoạt động như mong đợi. Nếu tôi chọn cả hai dòng với nhau, ít nhất tôi sẽ chọn dọc theo thụt đầu dòng cho dòng thứ hai (nếu không phải cho cả hai). Khi dán vào dòng lệnh, tôi sẽ gặp lỗi cho thụt đầu dòng đó.

Hành vi được thực thi đơn giản của trình thông dịch sẽ đơn giản là bỏ qua thụt đầu dòng.

Hành vi mạnh mẽ hơn là yêu cầu người thông dịch không kiểm tra thụt đầu dòng. I E. nếu thụt đầu dòng ở đó thì trình thông dịch nên cố gắng sử dụng nó để tôi vẫn có thể sao chép/qua ngay cả một đoạn mã có cấu trúc (ví dụ: các dòng từ 3 đến 8 của mã trên). Nhưng trong trường hợp có lỗi thụt đầu dòng thì nó sẽ bỏ qua chúng.

Nếu không có cách nào để làm những gì tôi yêu cầu ở đây, thì có các thủ thuật để làm điều tương tự: một cách đơn giản để nhanh chóng kiểm tra các đoạn mã của bạn mà không phải chạy toàn bộ chương trình mỗi khi bạn muốn điều chỉnh các phần nhỏ của nó ở đây và ở đó.

NB 1: unindenting là NOT giải pháp cho những gì tôi đang tìm kiếm.

NB 2: có thông dịch viên cùng với khả năng sao chép/dán cung cấp một cách rất mạnh mẽ để dễ dàng kiểm tra mã nhưng cơ chế thụt lề rõ ràng của Python là một hạn chế mạnh mẽ đối với việc sử dụng trình thông dịch như được mô tả tại đây không thể tìm thấy. Sẽ là một điều đáng tiếc.

+2

lõm là rất quan trọng để giải thích Python - một khối thụt chỉ mà dòng mã mùa thu của bạn trong đó cấu trúc có điều kiện, vòng lặp, vv Nó không thể được bỏ qua. Nó không giống như Java hoặc các ngôn ngữ khác, nơi thụt đầu dòng chỉ dành cho phong cách và quy ước. – user2048643

+0

Như người dùng đã nói ở trên, thụt lề là một phần thiết yếu của python, không có cách nào xung quanh nó. Thay vào đó, hãy sao chép mã mà không có thụt lề: bạn thường có thể chọn một khối hình chữ nhật bằng cách sử dụng Alt + Select. – RoadieRich

+9

Sử dụng 'ipython' thay vì – wim

Trả lời

45

Trong trường hợp này, tôi sử dụng sau lừa (thêm vào trước if 1:):

>>> if 1: 
...  print 1 
... 
1 
+1

@Yve, Trước khi dán mã của bạn, hãy nhập 'if 1:' + , sau đó dán. – falsetru

+0

@Yve: sau khi 'if' bạn cần một khối thụt lề mà sẽ luôn luôn được chạy, và bạn đang dán một khối thụt vào, ... – geoffspear

+0

Bí quyết tuyệt vời! Đề xuất tốt nhất cho đến bây giờ. Nhưng vẫn cần gõ thêm một dòng. –

34

Chức năng ipython %cpaste sẽ cho phép bạn dán mã thụt vào và hoạt động đúng:

In [5]: %cpaste 
Pasting code; enter '--' alone on the line to stop or use Ctrl-D. 
:  print "This is my function called with value 1." 
:  print "Done." 
:^D<EOF> 
This is my function called with value 1. 
Done. 
+0

Như tôi đã trình bày; trong ipython, gõ '% cpaste' và dán đi. (ipython thậm chí sẽ cho bạn biết về điều này nếu bạn dán mã thụt lề làm tăng một lỗi bình thường) – geoffspear

+0

Nếu chỉ thụt đầu dòng thứ hai được sao chép. Ngay cả với phương pháp của bạn, vẫn còn 'IndentationError'. – zhangyangyu

+0

Tôi chỉ dán hai dòng in trên vào itthon qtconsole mà không làm bất cứ điều gì (ví dụ: không có phép thuật), và nó chỉ hoạt động. – Christoph

2

Vâng, bạn có thể tạo các khối mã giả, do đó sau khi sao chép, dán mã của bạn sẽ thụt lề theo cách chính xác. Nếu mã từ ngoại hình, nơi bạn đang sao chép như thế này:

... 
    ... 
     <python code to be copied> 

Sau đó, trong vỏ, viết:

>>> if True: 
>>>  if True: 
>>> <Paste your code here> 
+3

Không phải là một gợi ý xấu, mặc dù @falsetru đã cung cấp cùng một điều. Ngoài ra, bạn không bao giờ cần nhiều hơn một khối giả, giả sử bạn chỉ dán mã mà không "suy luận" thêm vào bên trái so với dòng ban đầu đang được sao chép. –

+0

@JohnY yes Tôi đã nhận ra sau khi đăng câu trả lời của tôi rằng điều tương tự đã được thông báo :-) – Sudipta

6

Bạn có thể chỉ cần tránh sao chép các tab?

Notepad ++ và Visual Studio cho phép lựa chọn hình chữ nhật bằng cách giữ Shift + Alt khi chọn văn bản.

Bất kỳ trình chỉnh sửa nào bạn sử dụng cũng có thể cho phép điều đó.

Có, điều này không trả lời câu hỏi của bạn được hỏi, nhưng có thể nó sẽ giải quyết được vấn đề của bạn.

chỉnh sửa:

gvim cho phép lựa chọn hình chữ nhật bao gồm tất cả nội dung bởi dòng Ctrl-l vCtrl-q$Shift-Down or Up arrow. Cảm ơn Joel đã làm rõ điều này.

liên kết này giải thích và cung cấp giải pháp thay thế khác trong vim: http://vim.wikia.com/wiki/Add_trailing_blanks_to_lines_for_easy_visual_blocks

+0

Cảm ơn! Đây sẽ là câu trả lời hay nhất nếu tôi có thể làm điều đó với 'gvim'. Không may 'gvim' giới hạn một lựa chọn hình chữ nhật cho dòng ngắn nhất của nó (xem bình luận của tôi @Dennis Williamson ở trên). –

+0

@JoelDaroussin xem xét chỉnh sửa của tôi - không hỗ trợ gvim 'set ve'? – dss539

+0

Tôi không chắc chắn để hiểu bình luận và câu hỏi của bạn. Có lẽ câu trả lời nằm trong bình luận cuối cùng của tôi cho bài đăng gốc: "Tôi đang làm việc với' gVim' trên Windows, nơi các phím được định nghĩa lại. Trình tự phím tắt chính xác ở chế độ 'Chèn' là:' Ctrl-l v Ctrl-q $ Shift-Down hoặc Up arrow' Điều này làm cho một lựa chọn khối bao gồm các dòng lên đến cuối của họ bất kể chiều dài của họ.Đây là chính xác những gì tôi cần.Vì vậy, nó cuối cùng apears như một câu hỏi gVim chứ không phải là một câu hỏi Python. Tôi lập trình trình tự với [autohotkey.com] (http://autohotkey.com). Bây giờ tôi có một công cụ hoàn hảo. " –

Các vấn đề liên quan