Як замінити текст між цитатами у vi


106

Скажіть, у мене є такий рядок коду:

$query = "SELECT * FROM table";

Чи є команда vi / vim, яка може миттєво видалити все між цитатами та розташувати курсор між ними, щоб я міг почати вводити текст?

Відповіді:


182

Використовувати ci", що означає: змінити те, що знаходиться всередині подвійних лапок.

Ви також можете маніпулювати іншими текстовими об'єктами подібним чином, наприклад:

  • ci' - зміна всередині одиничних лапок
  • ciw - зміна всередині слова
  • ci( - зміна в дужках
  • dit - видалити всередині тегу HTML тощо.

Більше про різні текстові об’єкти vim тут .


2
Здається, працює лише з vim, але НЕ vi. (Не впевнений)
Іван Чау

Для мене це працює лише в поточному рядку, а не в документі.
І нарешті

яка команда тоді зробила б це назад? Тобто, якщо ви хотіли замінити текст всередині лапок, що знаходиться за курсором.
dtburgess

1
@dtburgess: Один із способів є F"ci".
Євген Ярмаш

ci 'і ci "працює добре, але ci (не працює для мене. Хтось має ідеї, чому?
Vram Vardanian

24

Ви можете вибрати між цитатами, а потім видалити ( d), змінити ( c) тощо за допомогою

vi"

Аналогічно, ви можете замінити дужки, дужки, елементи XML тощо таким чином:

vi(
vi{
vit

або просто змінити / видалити, зробіть відповідне di"і ci"т. д. Заміна aна iохоплює навколишні елементи (таким чином ви позначаєте або змінюєте дужки та вміст, наприклад)


5

Я зробив плагін vim-textobj-quotes: https://github.com/beloglazov/vim-textobj-quotes

Він надає текстові об'єкти для найближчих пар цитат будь-якого типу та підтримує цитати, що охоплюють кілька рядків. Використання лише iqабо aqдозволяє оперувати вмістом одинарних ('), подвійних (") або зворотних (`) цитат, які в даний час оточують курсор, знаходяться перед курсором або позаду (у такому порядку уподобань) Іншими словами, вона підскакує вперед або назад, коли потрібно, щоб досягти цитат.

Це легше зрозуміти, переглянувши приклади (курсор показано на |):

  1. Перед foo '1, |2, 3' bar:; після натискання diq:foo '|' bar
  2. Перед foo| '1, 2, 3' bar:; після натискання diq:foo '|' bar
  3. Перед foo '1, 2, 3' |bar:; після натискання diq:foo '|' bar
  4. Перед foo '1, |2, 3' bar:; після натискання daq:foo | bar
  5. Перед foo| '1, 2, 3' bar:; після натискання daq:foo | bar
  6. Перед foo '1, 2, 3' |bar:; після натискання daq:foo | bar

Наведені вище приклади для одинарних лапок, плагін працює точно так само як для подвійних (") і назад (`) лапок.

Ви також можете використовувати будь-які інші оператори: ciq, diq, yiq, viqі т.д.

Будь ласка, подивіться на пов’язану вище сторінку github для отримання більш детальної інформації.


3

Зсередини цитат ви можете зробити

di"

Прочитайте це як видалити всередині "


6
Курсор не повинен знаходитися в рядку з подвійним цитуванням, оскільки команда за замовчуванням змінює перший такий рядок у рядку
Євген Ярмаш

1
Дякую, що це дуже добре знати! Просто показує, що я повинен читати речі трохи уважніше. :)
Сем Мирний,

3

На додаток до відповіді Брайана, ви також можете p(вставити) та y(потягнути) нове значення, тож якщо ви хочете замінити значення всередині лапок на інше значення, ви можете зробити yi"для вибору, який потрібно скопіювати, vi"вибрати область що ви хочете замінити, а потім просто pправильно замінити значення.


0

Обрана відповідь підходить ТІЛЬКИ для ViM, але НЕ для vi. Питання також неточне, оскільки автор не згадав, яке початкове положення курсору. Якщо припустити, що курсор знаходиться всередині подвійних лапок, то для vi відповідь буде:

T"ct"

Де:

T "- переміщення назад відразу після символу"

c - змінити команду

t "- надайте кінцеву позицію для команди c, де вона повинна припинити стирання символів, іншими словами діапазон, який потрібно змінити

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