Чи можна видалити цілу лінію, крім розриву рядка?


33

Досить поширена для мене операція vim, оскільки я є компульсивно-нав’язливою і люблю зберігати файли без пробілів, - це видалити вміст цілого рядка, але не саму лінію (тобто не розрив рядка).

Чи існує вбудований спосіб vim для цього? Можливо, d<movement command>операція?

Поки що найкраще у мене є (на питальній лінії) 0d$. Чи є швидший шлях?


2
Як альтернатива обрізуванню пробілів вручну, ви можете використовувати плагін, такий як vim-better-whitespace , який висвітлює пробіл пробілів, надає команду видалити все це відразу і навіть може зробити це автоматично при збереженні.
дельтаб


3
Навіть не використовуючи плагін, ви можете глобально видалити пробіли пробілів за допомогою пошуку та заміни, наприклад:%s/\s*$//
Kyle Strand

Відповіді:


34

За допомогою 0Dцього пункту вийде перший символ у рядку та видалиться до кінця рядка. Зауважте, що ви можете використовувати, ^Dякщо хочете залишити будь-який попередній пробіл у спокої. Крім того, ці операції неможливо повторити за допомогою .. Якщо ви хочете операцію, яку можна повторити за допомогою .команди, зверніться до відповіді Девіда Лорда.

Теми довідки:

  • :help 0
  • :help D
  • :help ^

4
Хоча це прямо, до суті та (мабуть) найменших натискань клавіш, це не повторюється за допомогою .команди. З цієї причини, я думаю, cc<Esc>чи S<Esc>привабливіше, якщо ви дбаєте про повторення.
tommcdo

Це правда. Однак ви можете записати його як макрос і повторити це, використовуючи ..
EvergreenTree

Взагалі, макроси не можна повторити .. Вони працюють так, ніби ці натискання клавіш були введені інтерактивно, тому окремі команди розглядаються окремо. Використання .повторить лише останню команду в макросі.
tommcdo

Я перевірив це, і це не так працює для мене. Якщо записати макрос, то скористайтеся ним @{reg}, ви можете повторити його .згодом.
EvergreenTree

1
Ви просто повторюєте останню команду макросу, яка є D. Після 0Dоперації ваш курсор буде залишений у стовпці 0. Якщо курсор вже на початку рядка (після переходу на інший), він буде схожий на те, що макрос був повторений належним чином. Спробуйте перемістити курсор вперед у рядку і введіть .- ви побачите, що він лише повторюється D.
tommcdo

20

cc <Esc>буде робити, як ви просите, але це більше натискань клавіш, ніж 0D. Якщо ви хочете згодом щось поставити в цю лінію, ccможливо, найкраще.


2
Якщо включити Shift, це те саме і, можливо, простіше.
Холлоуей

4
Хоча це не "найчистіше" рішення, воно має одну перевагу: це рівно одна дія, і це повторюється за допомогою .команди. На відміну від цього 0D(як це пропонується у вибраній відповіді) - це дві дії: 0рух та Dкоманда.
tommcdo

@Trengot, мабуть, простіше, ніж 0Dдля мене, оскільки я jkсклав карту <Esc>в своєму vimrc, тому мої руки навіть не повинні були б виходити з домашнього ряду.
EvergreenTree

1
Дивіться відповідь @Nobilis: Sзадокументовано як "Синонім cc"
Volker Siegel

14

Sа потім Ctrl+Cабо, Escздається, виконують абсолютно таку ж функцію.

Потім його можна повторити, .оскільки він являє собою одну дію.


2
Я просто думав додати це як відповідь, а потім побачив своє
Sbell

7

0Dце, мабуть, те, що ти хочеш. Він видалить курсор до кінця рядка, залишаючи рядок (і будь-які символи перед курсором) на місці.


Якщо ця відповідь - almos років, варто зазначити, що 0Dбуде видалено з початку рядка , а не з позиції курсору
FliiFe

4

Я зазвичай використовую ddO. ddвидалити поточний рядок та O(це велика літери o), щоб додати новий рядок.

Це також 3 натискання клавіш, але ddнараховується лише півтора, і мені здається, що Oпростіше, ніж набрати $.

Він відрізняється від 0Dрішення тим, що робить автоматичне відступ, наприклад, з цим кодом (де !···вкладка та █ курсор:

def asd():
!···if foo:
!···!···foo()█
!···!···foobar()

0D залишить вас із:

def asd():
!···if foo:
█
!···!···foobar()

І ddOзалишимо вас із:

def asd():
!···if foo:
!···!···█
!···!···foobar()

І якщо ви натиснете <Esc>відразу після цього, Vim повинен видалити автоматичне відступ, тому у вас є те саме, що і з 0D.

Не існує «правильного» шляху, це залежатиме від того, що саме ви хочете зробити. Я вважаю за краще, ddOтому що вона більш гнучка, і тому, що "у мене в пальцях" :-)


2
^Dзалишить пробіл у спокої.
EvergreenTree

Оскільки Oви залишаєте вас у режимі вставки, це еквівалентно cc, за винятком випадків без автоматичного відступу .... якщо тільки ваша лінія вже не була відзначена автоматично.
Кайл Странд

Це буде вести себе по-різному в останньому рядку файлу.
tommcdo

0

І щоб зберегти той один дорогоцінний штрих ключа, який ви можете використовувати, 0Cякий видалить усі символи з поточного рядка та переведе вас у режим вставки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.