Як видалити вміст назад до "=" у попередньому рядку?


9

Я використовую приклад коду javascript:

1        var a = 1;
2        var b = |{};

Курсор знаходиться в положенні |(на символі "{", коли форма курсора блокується), я виявляю, що мені потрібно aпризначити об'єкт, тому я хочу змінити його, як нижче:

1        var a = {};

Тож я хочу знати, коли курсор увімкнено на "{", як швидко видалити весь вміст перед "{" до появи порожнього після знака "=" у рядку 1?

В інших звичайних редакторах я просто натискаю клавішу зворотної області, щоб видалити код. Але я не можу цього досягти in vim.


ви також можете натиснути iі використовувати клавішу зворотної області. Жодне тіло не застрелить вас за це. Я думаю.
еляшів

1
але зворотний простір не видалить символ верхньої лінії
Аарон Шен

3
@AaronShen Це залежить від вашої настройки "backspace". Якщо він включає, eolтоді заднім простором буде видалено розриви рядків. Також вам потрібно startбуде включити в налаштування. (Див. :help backspace) Не використовуйте цей метод, хоча! Існує кілька набагато швидших методів, детально описаних у відповідях нижче.
Багатий

Відповіді:


20

Не впевнений, чи я повністю розумію це питання, але якщо ви хочете видалити, поки у вас є var a = {};, ви можете з позиції курсору використовуватиd?1Enter

dприймає рух, і ви можете надати йому шаблон пошуку /для пошуку вперед або ?для пошуку назад.

Ось невеликий gif, що демонструє це:

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


1
Напевно, варто згадати, що вам потрібно натиснути Enterпісля набору тексту d?1.
Багатий

@ Дійсно дякую, я оновив відповідь, щоб включити це.
акшай

1
Який шрифт використовує ця оболонка?
Кріс Берт-Браун

@ ChrisBurt-Brown: Terminus
акшай

10

Якщо ви використовуєте vim (а не класичний vi), то у своєму прикладі ви могли б зробити vkd(або vkx).

  • v переведе його в режим візуального (вибору)
  • k піде вгору на один рядок, щоб поставити курсор на "1", вибравши частину, яку потрібно видалити
  • dабо xвидалить виділення

5

Видалити вгору

Цей конкретний приклад dgk- один з найшвидших способів зробити це.

За dкомандою, як пояснив Акшай , може слідувати рух, видаляючи всі символи між тим, де починається курсор, і де рухає його.

У своєму коді потрібно видалити все, що знаходиться між положенням курсору та тим самим стовпчиком, на один рядок далі вгору, так що переміщення курсору вгору gkрухом (який при використанні оператора буде не по рядку) досягне вашої мети.

EDIT: BobH в коментарях вказує, що цей метод працює лише тоді, коли 'wrap'встановлено. Таким чином, якщо ви завжди не встановлюєте обгортку, вам, мабуть, краще скористатися dvkабо vkd, як пропонують інші відповіді на цій сторінці.

Видалити слова назад

Ви також можете використовувати: d5bабо d4B, який видалить 5 слів або 4 СЛОВА назад, відповідно. ( 1;це одне слово, але два регулярних слова).


чому dk видалить як поточний, так і над рядком повністю
Аарон Шен

@AaronShen Nope. Спробуй це.
Багатий

1
@Rich, якщо це працює для вас, тоді у вас є налаштування, яке дозволяє цей рух видалити. Я щойно перевірив це, vim -u NONE -U NONEі він видаляє обидва рядки.
Вітор

@Vitor Ти маєш рацію. Намагаюся зрозуміти, яка настройка це робить, зараз.
Багатий

1
До речі, це виявляється, використовуючи так, gkяк мабуть, вимагає персонаж :set wrap(дещо критично). Я не міг зрозуміти, чому це, здавалося б, працює для всіх інших, але не для мене, коли допомога gkтак само, здавалося, передбачає, що вона повинна працювати. Єдина підказка полягала в тому, що основний сенс полягав gkу загортанні ліній. Одного разу я спробував налаштувати обгортку (вид на примху), вуаля, це спрацювало.
BobH

1

Я поки не можу коментувати, тому мені потрібно зробити нову відповідь. Клавіші, d kнадані Річ, не працюють для мене навіть при використанні несумісної опції. Причиною може бути те, що рух kвважається лінійним шляхом vim, і в цьому випадку обидва рядки видаляються. Від :help d:

Виняток для команди d {motion}: Якщо рух не є лінійним, початок і кінець руху не знаходяться в одному рядку, а перед початком і після закінчення руху є лише пробіли, видалення стає лінійно. Це означає, що видалення також видаляє рядок пробілів, які, можливо, ви очікуєте залишитися. Використовуйте | o_v | оператор, щоб змусити рух бути символьним

Він також показує засіб захисту: Використовуйте, dvkщоб примусити рух бути символом. Це робить трюк для мене.

Раніше я не знав o_v, ось ось :help o_v:

v

Якщо використовується після оператора, перед командою руху: Примушуйте оператора працювати символом, також коли рух є лінійним. Якщо рух був лінійним, він стане | виключним | Якщо рух вже було характерним, перемикайте включно / виключно. Це можна використовувати, щоб зробити ексклюзивний рух включно і включно рух ексклюзивом


«Несумісною» річчю була повна червона оселедець. Я заплутався, коли тестував, бо я ідіот.
Багатий

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