Чому ci "може знаходитись поза зоною котирування та ci (працює лише у дужках)?


27

При використанні ci"курсору не доведеться проживати в області з подвійним цитуванням.

|String somestring = "some text";

Якщо припустити, що труба є курсором, ci"вона змусить її стрибнути до області, що котирується.

З іншого боку, під час використання ci(курсор повинен знаходитись в круглих дужках для роботи і не переміщуватиме курсор всередині них.

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


Відповіді:


25

Основна відмінність тут полягає в тому, що дужки в дужках (націлені на ci() можуть вкладатись, а рядки з цитатами (націлені на ci") не можуть.

Якщо ваш курсор знаходиться поза деяким круглим викладом, він все ще може знаходитись в межах іншого. Наприклад ( *позначає положення курсору):

$foo = array(
    'x' => ar*ray(1, 2, 3),
);

Рядок, на якому знаходиться курсор, міститься (1, 2, 3), але курсор також знаходиться всередині більшого array(...)блоку. У цьому випадку більший розмір - це відповідна ціль ci(.

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


10

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

Існує дискусія навколо деяких патчів, що дозволило б реалізувати цю поведінку пошуку вперед і для текстових об'єктів на основі блоків.


8

Інші відповіді висвітлювали, чому це відбувається. Ось приємний спосіб обійти це.

wellle / targets.vim . Я нещодавно знайшов цей плагін, і я думаю, що він вкрай занижений. Це забезпечує новий текстовий об'єкт: din(Мнемоніка :. (Г) даліть (я) Nside (п) доб «(» Це сумісно з іншими операторами і декількома різними об'єктами, такими як an(, in", il((всередині останньої дужкою)

Він також переосмислює поведінку за замовчуванням, i(так що спочатку дивиться, чи є курсор у дужках, а потім, якщо це не так, він працює так само, як in(. Таку поведінку можна вмикати чи вимикати. Наприклад:

def foo(bar):
^cursor here

Введення тексту ci(діє так само cin(, як , оскільки курсор не знаходиться в дужках.

def foo( ):
        ^Cursor here, and in insert mode

Це також приймає кількість:

def foo(bar):           #Define function foo(bar)
^cursor here

Введення тексту c2in(:

def foo(bar):           #Define function foo( )
                                             ^cursor here

Це також забезпечує новий об'єкт, "аргумент". Наприклад, danaозначає "Видалити навколо наступного аргументу". Це також приймає підрахунок. Наприклад:

def foo(arg1, arg2, BADarg3):
^ cursor here

Введення тексту d3ana:

def foo(arg1, arg2):
                  ^ cursor here

У цього плагіна є багато інших функцій, але це основні.


1
Приємно! Це гарне доповнення. Мені, можливо, доведеться це перевірити.
Reaver

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