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


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.