Может ли vim заменить текстовый объект регистром по умолчанию? - PullRequest
3 голосов
/ 13 октября 2011

Пример: у меня есть какой-то текст, как этот код PHP

if(empty($condition)) {
    // work here...
}

И мой регистр по умолчанию содержит строку "$ NewCondition".

Я хочу поместить курсор в первый набор паренов (...) и выполнить команду, которая приведет к следующему:

if($NewCondition) {
    // work here...
}

Итак, мой вопрос: есть ли какой-нибудь способ заменить текст в скобках, используя регистр по умолчанию?

Большинство предложений, которые я нашел, , таких как этот , терпят неудачу, когда есть вложенные парены.

Я также знаю, что могу назвать регистры, например, "ayi(, чтобы вставить весь текст в скобках в регистр a, но я не хочу вводить два дополнительных символа каждый раз, когда я дергаю. Вот почему я спрашиваю о регистре по умолчанию.

В идеальном решении регистр по умолчанию по-прежнему будет содержать «$ NewCondition» после завершения замены.

Ответы [ 3 ]

4 голосов
/ 13 октября 2011
vi)p

К сожалению, это также поместит старый текст в регистр по умолчанию.

2 голосов
/ 13 октября 2011
vi("_dP
  • vi( для выбора empty($condition)
  • "_d чтобы удалить его в регистр черной дыры
  • P, чтобы поместить содержимое регистра по умолчанию перед курсором, который теперь находится на последнем )

Я часто использую это, поэтому у меня есть это отображение, чтобы сделать все это короче:

vnoremap <Leader>p "_dP

так (с , в качестве кленовщика) я делаю vi(,p.

В качестве примечания: если ваш курсор находится во втором наборе скобок, вы можете сделать vi(i(, чтобы подняться на один уровень вверх и т. Д.

1 голос
/ 13 октября 2011

Попробуйте это: "_ci)<c-r>"<esc>

Некоторые подробные объяснения здесь: "_ означает выбор регистра «черной дыры» для следующей команды. Таким образом, текст, который будет удален в вашей следующей операции, будет просто отброшен и не будет помещен ни в какие регистры. ci) означает «изменить внутренние скобки», он удалит весь текст в пределах текущего уровня пары скобок, а затем переведет вас в режим вставки. <c-r> в режиме вставки означает вставку текста в указанном регистре в текущую позицию курсора, а " выбирает «регистр по умолчанию». Наконец, мы используем <esc>, чтобы вернуть нас в нормальный режим.

Действительно много нажатий клавиш! Если вы используете такую ​​операцию очень часто, вы можете подумать о создании таблицы ключей для нее. Подробнее см. :help map.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...