Я намагався слідувати наступному:
Як видалити вибраний текст у редакторі VI
але
5dd
дає
E492: Не команда редактора: 5dd
Потім я спробував:
5d
Який видаляє лише один рядок. Як я можу видалити кілька рядків?
Я намагався слідувати наступному:
Як видалити вибраний текст у редакторі VI
але
5dd
дає
E492: Не команда редактора: 5dd
Потім я спробував:
5d
Який видаляє лише один рядок. Як я можу видалити кілька рядків?
Відповіді:
Здається, що ви вводите команди в командному режимі (ака. "Ex mode"). У цьому контексті :5d
буде видалено рядок №5, нічого іншого. Для 5dd
роботи за призначенням, тобто видаліть п’ять послідовних рядків, починаючи з курсору, - введіть її в звичайний режим і не встановлюйте префікс команд :
.
Мені це легше
/superuser/170795/how-can-i-select-and-delete-lines-of-text-in-vi
Ви можете видалити кілька рядків (діапазон), якщо знаєте номери рядків:
:[start_line_no],[end_line_no]d
Примітка: d означає видалення
де
start_line_no - це початковий рядок, який ви не хочете видаляти, а end_line_no - це закінчувальний рядок, який ви не хочете видаляти. Рядки між початком і кінцем, включаючи початок і кінець, буде видалено.
Наприклад:
:45,101d
Рядки між 45 і 101, включаючи 45 і 101, будуть видалені.
$
позначити останній рядок у файлі. Так :45,$d
би видалити кожен рядок від 45 до кінця.
/<\/div>/
:.,[end_line_no]d
Команди, перелічені для використання в звичайному режимі (префікс :для для командного режиму).
Випробуваний у Вім.
За сумою рядка:
За номерами рядків:
Backwards range given, OK to swap (y/n)?
Якщо ви віддаєте перевагу методу невізуального режиму та визнаєте номери рядків, я хотів би запропонувати вам інший простий спосіб.
Приклад
Я хочу видалити текст з рядка 45 до рядка 101.
Мій метод пропонує вам ввести команду нижче в командному режимі:
45Gd101G
У ньому написано:
Перейдіть до рядка 45 (
45G
), а потім видаліть текст (d
) з поточного рядка до рядка 101 (101G
).
Зауважте, що замість цього vim
ви можете використовувати .gg
G
Порівняйте відповідь @Bonnie Varghese:
:45,101d[enter]
Команда, викладена вище, вимагає ввести 9 разів, в тому числі enter, коли моя відповідь вимагає введення 8 - 10 разів. Таким чином, швидкість мого методу порівнянна.
Особисто я 45Gd101G
більше віддаю перевагу :45,101d
тому, що мені подобається дотримуватися синтаксису команди vi, в даному випадку це:
+---------+----------+--------------------+
| syntax | <motion> | <operator><motion> |
+---------+----------+--------------------+
| command | 45G | d101G |
+---------+----------+--------------------+
Натисніть Escклавішу, щоб переконатися, що ви не перебуваєте в режимі редагування. Помістіть курсор на перший рядок, який потрібно видалити. Введіть :5dd
. Поточний рядок та наступні чотири рядки слід видалити.
Крім того, якщо у вас включена нумерація рядків ...
Натисніть Escклавішу, щоб переконатися, що ви не перебуваєте в режимі редагування. Введіть, :#,#d
де "#" означає номери початкових і кінцевих рядків, які потрібно видалити.
Якщо ви хочете видалити діапазон ПІСЛЯ певного тригера рядка, ви можете використовувати щось подібне
:g/^TMPDIR/ :.,+11d
Це видаляє 11 рядків (включно) після кожної зустрічі ^TMPDIR
.
Для видалення всіх ліній використовується - ESC gg dG Щоб видалити кілька рядків, скажімо, 5, тоді використовуйте ESC 5dd
Це можна зробити так: