Lối tắt để thụt lề trong python là gì?

Sửa lỗi thụt lề Python trong Visual Studio Code. Xem tiện ích mở rộng trên VSCode Marketplace và mã nguồn của nó trên GitHub

Lối tắt để thụt lề trong python là gì?

Chủ đề được sử dụng trong gif. Chủ đề cộng đồng Palenight từ Chủ đề tài liệu cộng đồng v1. 4. 4

Lối tắt để thụt lề trong python là gì?
Lối tắt để thụt lề trong python là gì?
Lối tắt để thụt lề trong python là gì?

Làm thế nào nó hoạt động

Mỗi khi bạn nhấn phím

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
2 trong ngữ cảnh Python, tiện ích mở rộng này sẽ phân tích cú pháp tệp Python của bạn đến vị trí con trỏ của bạn và xác định chính xác số lượng dòng tiếp theo (hoặc hai trong trường hợp thụt lề treo) và cách thức

Có ba trường hợp chính khi xác định vết lõm chính xác, được mô tả bên dưới

Giữa các cặp dấu ngoặc

Trong trường hợp khi bạn đặt con trỏ giữa một cặp dấu ngoặc mở (một trong số

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
3) và cặp dấu ngoặc đóng của nó (một trong số tương ứng của
data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
4), tiện ích mở rộng này sẽ giữ cho các dòng tiếp theo được thụt vào ngay bên phải nơi nó được mở

data = {'a': 0,
        | # <- pressing enter should put your cursor at the "|"
| # <- this is where default VS Code puts your cursor

Ngay cả các dấu ngoặc lồng nhau cũng được xử lý

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
____5
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        'c': 5}
| # <- go back to indentation level before any brackets were opened
        | # <- default behavior of VS Code

Trong ví dụ đầy đủ bên dưới, Mã VS mặc định yêu cầu thêm chín lần nhấn phím (ba tab, hai dấu cách và bốn dấu cách) để phù hợp với thụt lề tự động của tiện ích mở rộng này

data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        'c': 5}
done(data)

thụt lề treo

Khi bạn đã mở một dấu ngoặc, nhưng chưa chèn bất kỳ nội dung nào, nhấn

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
2 sẽ tạo ra một khoảng thụt lề treo, phù hợp với hành vi cơ bản của Mã VS

result = my_func(
    | # <- your cursor should end up here
) # <- the closing bracket should end up here

Bạn có thể sử dụng cài đặt

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
6 để làm cho nó sao cho khi nhập xong, bạn chỉ cần nhấn
data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
7 để được đưa đến dấu ngoặc đóng

Nếu có nội dung ở bên phải con trỏ của bạn khi bạn nhấn

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
2, thì tiện ích mở rộng này sẽ chỉ thụt lề theo kích thước tab đã đặt của bạn

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
3

Nếu bạn không bao giờ muốn dấu ngoặc đóng kết thúc trên dòng riêng của nó (i. e. bạn luôn muốn thụt lề theo kích thước tab đã đặt), hãy sử dụng cài đặt cấu hình

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
9. Cảnh báo. Điều này có thể gây ra sự thụt đầu dòng khó hiểu với các định nghĩa hàm vì danh sách đối số và mã hàm có thể kết thúc ở cùng một mức độ thụt đầu dòng

Nó không thường được sử dụng, nhưng dấu gạch chéo ngược để tiếp tục một dòng cũng sẽ khiến dòng tiếp theo bị thụt vào

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
5

từ khóa

Một số từ khóa trong Python ngụ ý một số hành vi thụt đầu dòng. Ví dụ: nếu có một câu lệnh

data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
0, thì chúng ta biết rằng dòng tiếp theo có thể không được thụt lề (hoặc không được thụt lề) vì không có câu lệnh nào có thể theo sau một
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
0 trong cùng một khối mã. Các từ khóa khác theo cùng một mẫu là ________ 52, ________ 53, ________ 54 và ________ 55

Tương tự, nếu có một

data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
6 trên dòng hiện tại, thì dòng hiện tại cần được thụt vào và dòng tiếp theo cần được thụt vào so với vị trí mới của
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
6. Các từ khóa khác theo cùng một mẫu là
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
8,
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        | # <- since the lists are all closed, go back to the { position
              | # <- default behavior of VS Code
9 và
data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        'c': 5}
| # <- go back to indentation level before any brackets were opened
        | # <- default behavior of VS Code
0. Một số ví dụ được hiển thị dưới đây

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
7

Nhưng nếu bạn đã thay đổi thụt đầu dòng theo cách thủ công, tiện ích mở rộng sẽ không thay đổi nó cho bạn

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
8

Nếu (và chỉ khi) bạn nhấn

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
2 trong khi con trỏ của bạn đang ở giữa một nhận xét, thì dòng tiếp theo sẽ tự động được tạo thành một nhận xét

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
0

Cắt các dòng khoảng trắng

Bạn có thể cắt khoảng trắng khỏi các dòng chỉ chứa khoảng trắng bằng cách sử dụng cài đặt cấu hình

data = {'a': 0,
        'b': [[1, 2],
              [3, 4]],
        'c': 5}
| # <- go back to indentation level before any brackets were opened
        | # <- default behavior of VS Code
2 (mặc định là không cắt khoảng trắng theo cách này). Cài đặt này đưa hành vi đến gần hơn với hành vi VSCode gốc

data = {'a': 0,
        'b': [[1, 2],
              | # <- match the more recently opened [ instead of the {
        | # <- default behavior of VS Code
1

Tại sao nó cần thiết?

Có nhiều vấn đề liên quan trên GitHub ([1], [2], [3], [4], [5]) yêu cầu cải tiến Python indentation trong VS Code. Có vẻ như những người duy trì tiện ích mở rộng Python tại microsoft không ưu tiên thụt đầu dòng, vì đã không có tiến triển nào trong nhiều năm kể từ lần đầu tiên nó được yêu cầu