Как вы используете маркеры в vi? - PullRequest
5 голосов
/ 01 октября 2009

Я только что обнаружил существование маркеров в vi. Как вы используете это, что вы знаете о них? они полезны, скажем, для разработчика на C ++?

Ответы [ 4 ]

11 голосов
/ 01 октября 2009

Я использую их все время для:

  • комментируя блоки кода,
  • копирование и перемещение блоков кода,
  • восстановление и удаление блоков кода в именованные буферы и
  • Редактировать: замена в блоке теста.

Комментарий:

  • перейти к первой строке кода, который вы хотите закомментировать,
  • отметьте это, например введите ma
  • перейти к концу блока
  • введите :'a,.s/^/# (или любой другой символ комментария, который вам нужен)

Копирование и перемещение:

  • отметить первую строку как выше,
  • перейти в конец блока, который вы хотите скопировать / переместить
  • введите свой второй маркер, например, mb
  • перейдите туда, куда вы хотите скопировать блок, и введите :'a,'bco . или :'a,'bmo ., чтобы скопировать или переместить соответственно.

Янкирование в указанный буфер:

  • отметить первую строку как выше,
  • перейти к нижней части блока, который вы хотите восстановить
  • enter :'a,.ya a скомпонует блок в буфер a или :'a,.ya A добавит блок к текущему содержимому буфера a

Редактировать: Подставляя в блок текста:

  • отметить первую строку как выше,
  • перейти в конец блока, который вы хотите заменить в
  • введите :'a,.s/search_string/replace_string/[gc], который заменит ваш текстовый блок. Добавление 'g' или 'c' после последней косой черты вызовет обычную глобальность и подтвердит функциональность.

Редактировать: Забыл сказать, помните, что 'a (апостроф a) относится к строке, содержащей маркер, а `a (backtick a) относится к символу на отмеченной вами строке.

Итак, `ad`b (bactic-ad-backtic-b) представляет собой полезный небольшой фрагмент для удаления текста в строке от символа, обозначенного 'a', до символа до символа, отмеченного с б.

Кстати, в Vim ввод :reg даст вам содержимое всех ваших регистров, в т.ч. ваши удаления регистров.

3 голосов
/ 01 октября 2009

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

Если я объявляю класс или работаю с объявлением, с которым я не знаком, часто бывает полезно отметить место, где все сначала объясняется, чтобы я мог вернуться к нему для быстрого ознакомления.

Маркеры в целом полезны, но я не думаю, что они более (или менее) полезны, просто потому, что вы разрабатываете на C ++.

Это только некоторые идеи - я уверен, что будет много других хороших идей.

2 голосов
/ 01 октября 2009

Чаще всего используется для копирования-вставки или удаления больших блоков. Перейти к первой строке блока, наберите mx Перейдите к последней строке блока, введите y'x, чтобы скопировать весь блок (в буфер обмена), или d'x, чтобы удалить (вырезать) его. В любом случае, p или P можно использовать для вставки в другом месте.

1 голос
/ 01 октября 2009

Маркеры служат хорошим способом возврата к началу строки или точному местоположению в строке.

Обычно я использую их, когда хочу извлечь или скопировать часть кода. Учтите следующее:

int tmp = 0;
while (tmp < 10)
{
    doIt(tmp); /* cursor before d */
    /* ... */
    finishIt(tmp);
    tmp++
}

Если я хочу извлечь из doIt(tmp) в finishIt(tmp), я бы затем установил маркер на курсор (например, ma), переместился к finishIt, а затем удалил, чтобы пометить a с d'a.

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