ลบ“ แท็บ” ที่ว่างใน Vim ด้วยการกดแป้นเดียว?


19

ฉันแก้ไขPython code ด้วย Vim

ด้วยtabกุญแจฉันได้แทรกสี่ช่องว่างสำหรับการเยื้อง ฉันจะลบช่องว่างเหล่านั้นด้วยจังหวะ "Backspace" (?) - แทนที่จะเป็นสี่ช่องได้อย่างไร

จะต้องมีตัวเลือก "ตั้งค่า" สำหรับสิ่งนั้น ...

นี่คือ. vimrc ของฉัน:

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

คำตอบ:


23

คุณสามารถใช้Ctrl+Dสำรองข้อมูลได้หนึ่งแท็บหยุด นี่เป็นการย้ายทั้งบรรทัดไปทางซ้ายหนึ่งแท็บหยุด Ctrl+Tทำสิ่งเดียวกันไปทางขวา โปรดทราบว่าการกดแป้นเหล่านี้จะทำงานในโหมดแทรกเท่านั้น (ใช้<<และ>>เทียบเท่าในโหมดคำสั่ง)


30
set softtabstop=4

10
IMO นี่เป็นสิ่งที่ OP ต้องการ สมควรได้รับการโหวตมากขึ้น
ลุดวิก Weinzierl

2
นี่คือคำตอบที่ถูกต้อง
mk12

1
ไม่ทราบเกี่ยวกับสิ่งนี้และนี่คือสิ่งที่ฉันกำลังมองหา +1
NigoroJr

5

TL; DR: set tabstop=4 softtabstop=-1 shiftwidth=0 expandtab

แบบสั้น: set ts=4 sts=-1 sw=0 et

คำอธิบาย

หากคุณตั้งค่าsofttabstop(หรือsts) เป็น-1มันจะทำงานโดยอัตโนมัติเหมือนกับtabstop( ts) ซึ่งจะช่วยให้คุณไม่ต้องยุ่งยากหากคุณเปลี่ยนการแท็บเป็นจำนวนมาก การตั้งค่าshiftwidth( sw) ถึง0ควรทำให้มีประสิทธิภาพเช่นเดียวกันtabstopเช่นกัน

ในรายละเอียด

shiftwidth sw

จำนวนช่องว่างที่จะใช้สำหรับแต่ละขั้นตอนของการเยื้อง (อัตโนมัติ) ใช้สำหรับcindent, >>, <<ฯลฯ
เมื่อศูนย์tabstopค่าจะนำไปใช้

tabstop ts

จำนวนช่องว่างที่ a ในไฟล์นับ ดูเพิ่มเติมที่ :คำสั่งretabและ softtabstopตัวเลือก

softtabstop sts

จำนวนของช่องว่างที่Tabนับในขณะที่ประสิทธิภาพการดำเนินงานการแก้ไขเช่นการใส่หรือใช้Tab BSมัน รู้สึกเหมือนTabs จะถูกแทรกในขณะที่ในความเป็นจริงมีการผสมผสานของพื้นที่และมีการใช้ s นี้จะเป็นประโยชน์ที่จะให้คือการตั้งค่าที่ค่ามาตรฐานในขณะที่ความสามารถในการแก้ไขเหมือนว่ามันจะมีการตั้งค่า tabs เมื่อ เป็นค่าลบจะใช้ค่าของ การทำเช่นนี้จะช่วยให้คุณไม่ยุ่งยากหากคุณเปลี่ยน tabstops มาก เมื่อไม่ได้ตั้งค่าจำนวนช่องว่างจะลดลงโดยใช้sstsstsshiftwidthexpandtabTab

expandtab et

ในโหมดแทรก: ใช้จำนวนช่องว่างที่เหมาะสมเพื่อแทรก ช่องว่างที่ใช้ในการเยื้องกับ>และ<คำสั่งและเมื่อautoindentเปิด การแทรกแท็บจริงเมื่อexpandtabอยู่ในการใช้งาน-Ctrl V Tabดูเพิ่มเติมที่ : retab


เรียบร้อยฉันใช้เสียงเรียกเข้ามาหลายปีแล้ว แต่การสืบทอดของ sts / sw / ts ไม่เคยสะดุดตาเลย
timss

2

ฉันเขียนGreedyBackspace.vimสำหรับคนที่ต้องการอะไรแบบนี้ ฉันไม่ได้ใช้มันเป็นการส่วนตัวดังนั้นจึงไม่นานหลังจากที่ฉันได้ทำการอัพเดต ฉันยังไม่ได้รับรายงานข้อผิดพลาดใด ๆ เมื่อเร็ว ๆ นี้


1

หลายตัวเลือก:

  1. คุณสามารถ 'retab' whitespaces ทั้งหมดเพื่อให้พวกเขาถูกแทนที่ด้วยแท็บ วิธีที่พวกเขาสามารถลบได้ง่าย
  2. คุณสามารถทำได้ (นี่คือยังไม่ทดลองดังนั้นฉันแค่เสนอแนวคิดที่นี่) สร้างฟังก์ชันที่ 'เรียกใช้งานในโหมดปกติ 4 เท่าของปุ่ม backspace จากนั้นแมปกับบางสิ่ง อย่างไรก็ตามมันไม่มีทางรู้ว่ามันจะลบช่องว่างหรือตัวละครสำคัญบางส่วนดังนั้นสิ่งนี้อาจไม่ปลอดภัย
  3. '4X' จะลบอักขระ 4 ตัวสุดท้าย (นั่นคือ X ตัวใหญ่ไม่เล็กตัวเล็กจะทำหน้าที่เหมือนกับปุ่ม Del '

0

วิธีที่ง่ายที่สุดคือ<<ทำซ้ำกับ.


สวัสดีและยินดีต้อนรับสู่ superuser แม้ว่าฉันจะเห็นด้วยกับคำตอบของคุณเป็นผู้ใช้ vi ตัวเอง คำตอบของคุณสั้นไม่ได้อธิบายว่าทำไมคุณแนะนำสิ่งที่คุณแนะนำและทำไมคุณไม่แนะนำสิ่งที่เหมาะกับคำถามที่ถาม
Mogget

-1

คุณตรวจสอบโดยใช้การตั้งค่าแท็บขยายใน VIM ของคุณหรือไม่

:set noet

ฉันมักจะชอบเก็บแท็บในขณะที่ทำงานกับไฟล์
เมื่อจำเป็นฉันจะแทนที่แท็บเป็นช่องว่าง 4 ช่องหรือมากที่สุดเท่าที่ต้องการ

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

เป็นไฟล์ขนาดเล็กโบนัสไฟล์ต้นฉบับของคุณจะสั้นกว่า 3 ตัวอักษรต่อแท็บ :-)


โอ้ฉันมีเพราะฉันต้องขยายแท็บ - ฉันคิดว่า - เพราะรหัสที่ฉันแก้ไขถูกเขียนขึ้นในตอนแรก ตอนนี้ฉันแค่ทำตามแบบแผนนั้น
Evgeny

คุณยังคงสามารถทำในสิ่งที่ผมพูดและเรียกคืนพื้นที่ในตอนท้าย (เมื่อคุณมีเพื่อให้แฟ้มกลับไปยังพื้นที่เก็บข้อมูล)
nik

บางทีคุณอาจมีฟังก์ชั่นเสียงเรียกเข้าที่ขยายไปยังแท็บที่เปิดอยู่และยุบลงในช่องว่างเมื่อปิด? ใครมีความคิดเห็นบ้าง
sixtyfootersdude

นี่เป็นคำตอบที่ไม่ช่วยเหลือจริงๆ - มันไม่จำเป็นต้องเปิดการอภิปรายแท็บเทียบกับช่องว่างโดยไม่จำเป็นต้องให้ข้อมูลที่เป็นประโยชน์ใด ๆ
Dietrich Epp

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.