vim видалення відсталих хитрощів


119
  • Як видалити слово зліва? Іншими словами, видаліть слово, коли курсор стоїть в кінці його.
  • Як видаляти символи на початку рядка?
  • Як видалити перший пробіл зліва?

  • Будь-які інші хитрощі, пов’язані зі видаленням слова?

Відповіді:


163

Як правило, d <motion> буде видалено з поточного положення в кінцеве положення після <motion>. Це означає що:

  1. d <leftArrow> видалить поточний та лівий символ
  2. d $ видалить з поточної позиції до кінця рядка
  3. d ^ буде видалено з поточного назад до першого символу, який не пробіл
  4. d0 буде видалено з поточного назад до початку рядка
  5. dw видаляє поточний до кінця поточного слова (включаючи пробіл)
  6. db видаляє поточний до початку поточного слова

Прочитайте це, щоб дізнатися про всі речі, які можна поєднувати з командою 'd'.


2
Ще один зручний ярлик, якщо вам dbважко запам’ятати: 5. dw or d<ctrl+rightarrow>і 6. db or d<ctrl+leftarrow>
Crisboot

7
Замість того , щоб друкувати d<leftArrow>робити dhзамість цього, так як hце ключ для переміщення вліво
Dylanthepiguy

4
Чому така прийнята відповідь? d <leftArrow> (а не нижче, за винятком dw) не видалить символ під курсором, як хотів ОП.
listerreg

73

Я був у цьому сценарії багато разів. Я хочу позбутися всіх пробілів у рядку 10, щоб він з'єднувався з рядком 9 після коми.

введіть тут опис зображення

Це в основному просте об'єднання рядків у VIM.

kJ робить фокус (дивіться нижче)

Vim Join Lines


9
Я всюди цього шукав!
functionvoid

2
ха-ха, я хочу цього, і я не маю уявлення, як це описати в Google. Так пощастило, що я прокручую вниз =))
Thai Tran

1
Не можу повірити, скільки разів я робив це вручну. Це саме те, що я шукав, ДЯКУЮ!
tobiasandersen

1
це саме те, що я шукав. Vim щодня дує мій розум
сингмотор

4
Поясненням цього є: k= Вгору, J= Приєднати рядок нижче до поточного з проміжком між ними. Ви також можете зробити kgJприєднання без місця. gJ= Поєднати лінію нижче, не маючи місця між ними. Через шпаргалку: vim.rtorr.com
ХалилРаванна

31

Відповісти на пункт №3, diwі dawчудово.


4
Мені сумно, що немає двох символьних команд для видалення слова назад, коли ти знаходишся на останньому листі, тому що в стандартних редакторах, таких як блокнот ++, gedit і т. Д., Ти можеш легко використовувати CTRL + Backspace ... крім цього vim відмінний.
itmuckel

3
@ roggan87 Якщо ви є останньою літерою слова, dbвидаляйте літери, що передують останній букві, але все ж залишає останню букву.
Прашант Чандра

2
Чи можете ви пояснити, що iі що aробите посеред цих команд? Я знаю, що головним dє "видалити", і я припускаю, що трейлінг w- "слово".
Карл Г

1
@CarlG Найкраще пояснення в :help text-objects. Провідний абзац дуже стислий, і я думаю, що це дуже добре описує.
Ренді Морріс

5
<kbd> i </kbd> - "внутрішній", а <kbd> a </kbd> - "а", як у "слові". Перший не буде включати пробіли, що закриваються, а другий буде містити пробіли пробілів, якщо такі є, інакше буде включати попередній пробіл. Дуже корисно, дякую.
Карл Г

25

У режимі вставки:

  • ^ ш
  • ^ у
  • не можу відповісти з голови ;-)

Інакше:

  • роси
  • v0x
  • не можу відповісти з голови ;-)

Я не знав, що можу видалити слово в режимі Вставка у Vim. Це дуже допомагає.
Đỗ Tiến

18

У командному режимі:

  1. bdw, назад видалити слово.
  2. d^(до першого непорожнього), d0(до першого символу)
  3. BdW (перейти до першого пробілу видалити до наступного пробілу)

(Вікі спільноти, не соромтеся зламати.)


14
  1. db (якщо курсор після слова) або bdw
  2. d0(або d^якщо ви хочете видалити перший порожній символ)
  3. dEабо dtSpaceвидалити до першого пробілу або d/\sEnterвидалити наступний символ пробілу.

Редагувати

Оскільки питання було змінено таким чином, що 3 видаляється першим символом пробілу зліва, мою відповідь слід змінити на:

  1. dBабо dShiftTSpaceвидалити назад до першого пробілу або d?\sEnterвидалити попередній символ пробілу.

Побачити:

:help motion.txt
:help WORD

Гарний дзвінок на номер 3. Я не знав, як поводитися з будь-яким пробілом. Варто зазначити, що dF <SPACE> видалить до і включить <SPACE>, тоді як dT <SPACE> залишить там <SPACE>.
Марк Бік

Сюди прийшли шукати щось на кшталт bdw. Решта символів (первісно під курсором) dbмене дратувала.
Дейвін

8

Я вважаю, що жодна з відповідей не є повною:

Як правило, ви зазвичай починаєте операцію видалення, використовуючи d<motion>, і рідко використовуючи x.

Примітка: Якщо Nне вказано, поводиться так, ніби N=1(видаляє одну таблицю)

Дискретні символи:

<N>x - Видаліть N символів праворуч

d<N><left-arrow> - Видаліть N символів зліва

d<N><right-arrow> - Видаліть N символів праворуч

Межі слова:

Примітка. Перше попереднє / наступне слово - це слово під курсором

d<N>b - Видалити з початку попереднього N-го слова до поточної позиції

d<N>e - Видалити з поточного положення до кінця наступного N-го слова

d<N>w- Те ж, d<N>eале в тому числі і заднім пробільних

diw - Видаліть ціле слово під курсором

daw- Те ж, diwале в тому числі і заднім пробільних

Межі лінії:

d0 - Видалити з початку рядка до поточної позиції

d^ - Видаліть з першої непробільної таблиці до поточної позиції

d$ - Видалити з поточної позиції до кінця рядка


1

/ <CR>x

(шукайте пробіл вперед, натисніть клавішу Enter, щоб перейти туди, x для видалення)

Можливо, є більш магічний спосіб зробити це, але я не знаю про нього.


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