Обмеження операцій до розділу коду


10

У моєму щоденному робочому житті багато разів мені потрібно працювати над певною функцією, такі як виділення чи пошук змінної, але мені ніколи не вдалося обмежити область редагувань / пошуку.

Чи є спосіб vim вибірково сказати, знайти всі посилання на $colorці набори дужок або на цю складку тощо. Якщо можливо, ідеально це було б відносно загальним, щоб його можна було застосувати до редагування / заміни тексту.

Як приклад:

$color = "#fff";
function PickColor () {
  $color = "#bbb";
  $newColors = ["#000", "#fbf", $color];
  foreach ($newColors as $c) {
    if ($c == "#fff") {
       break;
    }
  }
}
$differentColor = $color;

Цей код є відносно поганим прикладом, однак, якщо мені потрібно було замінити всі екземпляри $ color, як би це зробити в контексті функції PickColor. Як інший приклад, використовуючи #та *Ви можете перейти до наступного екземпляра цього текстового об’єкта, як би ви обмежили область пошуку лише цією функцією (в основному завершуючи пошук) на противагу всьому файлу, який може охопити тисячі рядків і втратити ваше місце, або неправильно замінити щось на іншій функції, яку у вас не повинно бути?

Відповіді:


15

Ось кілька способів зробити це.

1  | $color = "#fff";
2  | function PickColor () {
3  |     $color = "#bbb";
4  |     $newColors = ["#000", "#fbf", $color];
5  |     foreach ($newColors as $c) {
6  |         if ($c == "#fff") {
7  |             break;
8  |         }
9  |     }
10 | }
11 | $differentColor = $color;

Я змінив ваш приклад, щоб включити номери рядків.

Тож тепер ви можете замінити екземпляри $color, скажімо $newColor, такими способами.

Діапазони номерів рядків

:1,11s/\$color/$newColor/g

Це змушує заміну працювати на лініях 1-11 включно.

Відносні діапазони ліній

Розмістіть курсор на рядку 1, потім ...

:.,11s/\$color/$newColor/g

Це говорить про те, що діапазон починається з поточного рядка і закінчується на рядку 11.

Діапазони візуального вибору

Перейдіть до рядка 1 і натисніть Shift+Vпотім G. Це візуально вибирає рядок 1. Потім ...

:'<,'>:s/\$color/$newColor/g

Це обмежує заміну до діапазону, охопленого вашим вибором. Vim автоматично вставить '<,'>діапазон для вас при натисканні :при активному виборі.


Я люблю vim, завжди є чому навчитися та відкрити для полегшення життя щодня :)
Кайл Макгілл

6

Якщо вам зручно їхати по маршруту плагіна, є NrrwRgn .

Ви візуально вибираєте блок, потім запускаєте :NRкоманду, яка відкриває новий буфер (у розбитті) з обраним текстом. Ви можете вносити зміни до цього буфера, і коли ви зберігаєте його, він також зберігається у вихідний файл.

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


Це один із плагінів, які я клянусь .. це як би мати невеликий буфер подряпин, який ви зможете повернути до свого звичайного файлу коду.
craigp

3

Ви вибираєте блок, який вас цікавить, у режимі візуального рядка (shift + v), після чого ви вводите :та свою команду, яка тепер застосовуватиметься до блоку.

Тож якщо ви хотіли замінити у виборі, можете запустити :s/string/replacement_string


право; напр.,VaB:s/\$color/replaced/g
wchargin

Щойно додав це, хороший момент :)
Стефан Дорунга

0

Використовуйте текстовий об’єкт дужок '}' та виберіть всередині дужок слово «i}»

на лінії з відкриттям фігурної дужки функції:

$<C-V>i}:s/\$color/$newColor/g

спочатку перейдіть до кінця рядка (який буде знаходитись у внутрішній дужці або всередині неї), потім перейдіть у візуальний вибір, а потім виберіть за допомогою текстового об’єкта дужок. 'i}' знаходиться в дужках 'a}' є навколо брекетів.

Для мов, яким не вистачає дужок, Vim Text Object: Посібник з остаточним підсумком пропонує деякі додатки:

  • Для таких мов, як Python та CoffeeScript, відступ об’єкта надає текстові об'єкти на основі рівня відступу: aiвключає поточний рівень відступу та рядок вище; iiвключає поточний рівень відступу, виключаючи рядок вище.
  • Ruby Block додає підтримку текстових об’єктів arі ir, виходячи з наявності endключового слова.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.