Xóa tab tab được mở rộng không gian trong Vim bằng một lần nhấn phím?


19

Tôi chỉnh sửa mã Python bằng Vim.

Với tabchìa khóa, tôi nhận được bốn khoảng trắng được chèn để thụt lề. Làm cách nào tôi có thể xóa các khoảng trắng đó bằng một nét "Backspace" (?) - thay vì bốn?

Phải có một số tùy chọn "thiết lập" cho ...

Đây là .vimrc của tôi:

set autoindent
set ts=4
set sw=4
set et

Câu trả lời:


23

Bạn có thể sử dụng Ctrl+Dđể sao lưu một tab dừng. Điều này thực sự di chuyển toàn bộ dòng sang bên trái một tab dừng; Ctrl+Tlàm điều tương tự ở bên phải. Lưu ý rằng các tổ hợp phím này chỉ hoạt động ở chế độ Chèn (sử dụng <<>>tương đương trong chế độ Lệnh).


29
set softtabstop=4

10
IMO đây chính xác là những gì OP yêu cầu. Xứng đáng hơn upvote.
Ludwig Weinzierl

2
Đây là câu trả lời chính xác.
mk12

1
Không biết về điều này, và đây chính xác là những gì tôi đang tìm kiếm. +1
NigoroJr

4

tl; dr: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

hình thức ngắn: set ts=4 sts=-1 sw=0 et

Giải trình

Nếu bạn đặt softtabstop(hoặc sts) thành -1nó sẽ tự động hoạt động giống như tabstop( ts), điều này sẽ giúp bạn tiết kiệm một số rắc rối nếu bạn thay đổi nhiều tab. Thiết lập shiftwidth( sw) để 0có hiệu quả cũng làm tabstopnhư vậy.

Chi tiết

shiftwidth sw

Số lượng không gian để sử dụng cho mỗi bước thụt lề (tự động). Sử dụng cho cindent, >>, <<vv
Khi zero các tabstopgiá trị sẽ được sử dụng.

tabstop ts

Số lượng khoảng trắng mà a trong tệp được tính. Cũng xem : lệnh retab , và softtabstoptùy chọn.

softtabstop sts

Số lượng khoảng trống Tabđược tính trong khi thực hiện các thao tác chỉnh sửa, như chèn một Tabhoặc sử dụng BS. Nó cảm thấy như Tabs đang được đưa vào, trong khi trên thực tế một kết hợp của không gian và s được sử dụng. Điều này hữu ích để giữ cho tabscài đặt ở giá trị tiêu chuẩn của nó, trong khi có thể chỉnh sửa như được đặt thành sts. Khi stsâm, giá trị của shiftwidthđược sử dụng. Điều này sẽ giúp bạn tiết kiệm một số rắc rối nếu bạn thay đổi tabstops rất nhiều. Khi expandtabkhông được đặt, số lượng khoảng trắng được thu nhỏ bằng cách sử dụng Tabs.

expandtab et

Trong chế độ Chèn: Sử dụng số lượng khoảng trắng thích hợp để chèn a. Không gian được sử dụng trong indents với ><lệnh và khi autoindentđược bật lên. Để chèn một tab thực khi expandtabbật, sử dụng Ctrl- V Tab. Xem thêm : retab


Không, tôi đã sử dụng vim trong nhiều năm nhưng sự kế thừa của sts / sw / ts không bao giờ lọt vào mắt tôi.
timss

2

Tôi đã viết GreedyBackspace.vim cho một người muốn một cái gì đó như thế này. Cá nhân tôi không sử dụng nó vì vậy đã được một thời gian kể từ khi tôi cập nhật nó. Tôi đã không nhận được bất kỳ báo cáo lỗi về nó gần đây, mặc dù.


1

Một vài lựa chọn:

  1. Bạn có thể 'retab' tất cả các khoảng trắng để chúng được thay thế bằng các tab. Bằng cách đó họ có thể dễ dàng bị xóa.
  2. Bạn có thể (điều này chưa được kiểm tra, vì vậy tôi chỉ đề xuất ý tưởng ở đây) tạo một chức năng 'thực thi' ở chế độ bình thường gấp 4 lần phím xóa lùi. Sau đó ánh xạ nó đến một cái gì đó. Tuy nhiên, nó không có cách nào để biết liệu nó sẽ xóa khoảng trắng hoặc một số ký tự quan trọng, vì vậy điều này có khả năng không an toàn.
  3. '4X' sẽ xóa 4 ký tự cuối cùng (đó là chữ X lớn, không nhỏ, nhỏ sẽ hoạt động giống như phím Del '.

0

Cách dễ nhất là <<, lặp lại với một.


Xin chào và chào mừng đến với superuser. Mặc dù tôi đồng ý với câu trả lời của bạn là một người dùng vi. Câu trả lời của bạn ngắn gọn, không giải thích lý do tại sao bạn đề xuất những gì bạn đang đề xuất và tại sao bạn không đề xuất một cái gì đó phù hợp với câu hỏi được hỏi.
Mogget

-1

Bạn đã kiểm tra bằng cách sử dụng cài đặt tab mở rộng trong VIM của mình chưa?

:set noet

Tôi thường thích giữ các tab trên trong khi làm việc trên các tập tin.
Khi được yêu cầu, tôi thay thế các tab thành 4 khoảng trắng hoặc nhiều như yêu cầu.

:%s/<ctrl+V><tab>/    /g
                  ----

Là một phần thưởng nhỏ, tệp nguồn của bạn ngắn hơn 3 ký tự trên mỗi tab :-)


ồ, tôi có et vì tôi phải mở rộng các tab - tôi nghĩ - bởi vì mã tôi chỉnh sửa ban đầu được viết theo cách đó. Bây giờ tôi chỉ theo quy ước đó.
Evgeny

Bạn vẫn có thể làm những gì tôi nói và khôi phục khoảng trắng ở cuối (khi bạn phải đưa tệp trở lại kho lưu trữ)
nik

Có lẽ bạn có thể có một chức năng vim mở rộng chúng thành các tab khi mở và thu gọn chúng vào không gian khi đóng? Còn ai có ý tưởng nào không?
Sixty feetersdude

Đây là một câu trả lời thực sự không có ích - nó không cần phải mở lại cuộc tranh luận giữa các tab và không gian, mà không thực sự cung cấp bất kỳ thông tin hữu ích nào.
Dietrich Epp

-2

Tôi không nghĩ có một cách. Khi khóa tab được mở rộng thành bốn khoảng trắng, vim không có cách nào để biết chúng từng là một tab.


4
-1: Thiếu trí tưởng tượng.
Sixty feetersdude 23/210
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.