128

Приемы редактирования текста в VS Code: мультикурсор

Visual Studio Code - текстовый редактор с отрытым исходным кодом, развиваемый компанией Microsoft. Благодаря огромному количеству расширений, написанных энтузиастами, эту программу можно превратить в мощный инструмент для широкого спектра задач, от програмирования до редактирования текстовых публикаций.


При работе с текстовыми файлами часто возникает необходимость массового редактирования некоторых фрагментов. С простыми случаями (заменить 'abc' на 'def') справляется интуитивно понятная функция автозамены, которая есть в любом распространённом редакторе. Но что делать, если Вам нужно, например, найти все слова, начинающиеся на букву "t", и поменять их местами со словом, которое идет после них?


Мультикурсор через поиск


Для начала давайте разберёмся, как составить выражение для поиска. Откроем стандатное окно поиска командой Ctrl-F (от слова Find) и вводим ' t'. Редактор автоматически подсвечивает найденные места (буква t, перед которой есть пробел), и мы можем заметить, что забыли о словах, перед которыми стоит знак препинания (например, кавычка или дефис). К счастью, в задачах вроде нашей приходят на помощь регулярные выражения, в частности, вида '\Wt', где \W - специальная последовательность, обозначающая начало слова. Активировать функцию "регулярок" можно кнопкой .*


Регулярные выражения - это отдельная очень большая тема. Если кому-то интересно, пишите в комментариях - напишу отдельный пост, посвященный им. Также можете изучить их самостоятельно на regexone.com и потренироваться на regex101.com


Теперь мы можем нажать Alt-Enter, и редактор вставит по курсору в каждом месте, где был найден искомый фрагмент:

Обратите внимание, что курсоры можно перемещать стрелками, а также выделять фрагменты, зажимая Shift. Так как Ctrl со стрелками позволяет перемещаться до конца слова, нажатием Ctrl-Shift-вправо я могу выделить каждое найденное слово:

после выделения слова я дополнительно выделил еще один символ, чтобы "захватить" последующий пробел или знак препинания


Теперь можно вырезать выделенные фрагменты (Ctrl-X), переместиться на одно слово вправо (Ctrl-вправо) и вставить их (Ctrl-V). Если количество курсоров при вставке осталось неизменным, то каждый вырезанный фрагмент будет вставлен на своё место:

Конечно, пример "высосан из пальца", но есть немало задач, где этот способ будет полезен. Например, найти и заменить все email-адреса в тексте, исправить тэги в html или xml файле, поменять местами колонки в файле csv.


Вставка мультикурсора вручную


Множественные курсоры можно также вставить вручную, командами Ctrl-D (следующий совпадающий с выделенным фрагмент) и Ctrl-Shift-L (вставить курсоры в каждый фрагмент, совпадающий с выделенным). Например, я выделил фрагмент 'текст' и два раза нажал Ctrl-D:

Кстати, вам не нужно заучивать сочетания клавиш, которые я упомянул. Достаточно лишь запомнить "магическую" команду Ctrl-Shift-P, которая даёт доступ ко всем командам:

Причём поиск "умный", позволяет находить команды по первым буквам, например:

В эта статье я рассказал лишь о нескольких функциях, которыми обладает этот редактор. Вы можете найти больше полезной информации на официальном сайте: Visual Studio Code Tips and Tricks. Поделитесь в комментариях, какие функции и расширения VS Code Вы считаете самыми полезными.


TL;DR

Основные команды:

Ctrl-D - добавлять курсоры по одному, на каждое совпадение (с выделенным куском)

Ctrl-Shift-L - добавить курсоры на все совпадения

Alt-Enter (в окошке поиска) - добавить курсоры на все совпадения к запросу

MS, Libreoffice & Google docs

781 пост15K подписчика

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.

6
Автор поста оценил этот комментарий

Обозвать среду разработки текстовым редактором? Это что-то новенькое! ))

раскрыть ветку (1)
3
Автор поста оценил этот комментарий

Все-таки VS Code сам по себе - это текстовый редактор (пусть и продвинутый). Хотя с установленными расширениями он действительно превращается в полноценную IDE.

Автор поста оценил этот комментарий

Спасибо ТС, но уже давно есть "Sublime Text" с тоннами плагинов под любые задачи. Все описанное выше там присутствует.

раскрыть ветку (1)
2
Автор поста оценил этот комментарий

Не спорю, сам раньше им пользовался. Но он, во-первых, платный. Во-вторых, для VS Code расширений тоже тонны, на любой вкус и потребность. По активности сообщества, по моему впечатлению, VS Code впереди.

показать ответы
0
Автор поста оценил этот комментарий

При чем тут С++?
А чем вам Go не нравится? (и да, я под арчем работаю)

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Ни при чем, человеку просто нужно докопаться и устроить срач.

DELETED
Автор поста оценил этот комментарий

@moderator, оскорбление!

раскрыть ветку (1)
1
Автор поста оценил этот комментарий

Уважаемый @reaferon просто называет вещи своими именами.

0
Автор поста оценил этот комментарий

У меня не особо большой опыт работы с ним, но по мне он достаточно тормозной. Во всяком случае у меня осталось такое впечатление.

Ну и электрон, ИМХО, сам по себе зло)

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

С одной стороны, согласен насчёт электрона - тащить браузер, чтобы в нем запустить десктопное приложение, кажется странной идеей. И в большинстве случаев такие приложения действительно тормозные.


Но вот именно VS Code, на мой взгляд - приятное исключение из этого правила. Ну и мой опыт работы с ним противоположный - неплохо работает даже с довольно большими файлами. Впрочем, недавно пришлось ковырять 130-мегабайтовый json, лучше всего справилась обычная студия (Visual Studio 2019). Но и сабж тоже неплохо показал себя.

показать ответы
DELETED
Автор поста оценил этот комментарий
Комментарий удален. Причина: оскорбления, грубое общение и провокации
раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Ну вот я, "тупорылый вендузятник", активно использую VS Code. За последнее время для того что:

* Отформатировать и проанализировать json'ы

* Редактировать xml

* Набирать в markdown

* Сгенерировать на C# и TS классы из json'ов

Посоветуете аналог, который был бы столь же универсален?

показать ответы
DELETED
Автор поста оценил этот комментарий

Латех - это единственный способ получить вменяемый документ для печати!

А "массовый пользователь" - это та же муха, которая дерьмо жрет! Не надо вообще на мух внимание обращать!!! Пусть на помойке обитают.

раскрыть ветку (1)
0
Автор поста оценил этот комментарий

Данный пост предназначен именно для таких "мух", как Вы изволили выразиться. Люди разных профессий редактируют текстовые файлы, в том числе очень большие.

VS Code один из лучших текстовых редакторов общего назначения. Никто не спорит с тем, что под узкую задачу, в частности программирование на конкретном языке, есть свои специальные IDE.

0
Автор поста оценил этот комментарий

Привет. Вот такой вопрос возник. При изучении регулярных выражений (отработке навыков) самым непростым является поиск задач для решения, ка ни странно. Хочет спросить, нет ли задач по теме?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Вот тут на первый взгляд неплохие задачки чтобы потренироваться https://regexone.com/

0
Автор поста оценил этот комментарий

хоткеи кардинально отличаются

Что говорит нам о том, что вы никогда не работали с решарпером. Это не плохо, просто вкусовщина, но не кейс для большинства шарпистов. Ибо шорткаты туда переехали.


А VS Code активно использую параллельно - именно как текстовый редактор

Вот тут поддерживаю.

раскрыть ветку (1)
Автор поста оценил этот комментарий

С решарпером работал прежде, но относительно недолго, и в основном все равно использовал хоткеи студийные. Но в целом согласен, вкусовщина.

0
Автор поста оценил этот комментарий

Может они человеки-оркестры, а не просто шарписты? Если пописывать параллельно много на динамических языках, вроде питона, то, возможно, есть смысл так страдать.


Как шарпист, еще ни разу не встречал конторы, которая не предлагала хотя бы R# к студии (это практически корп.стандарт де факто), но последние полгода вижу тенденцию с альтернативой в виде Rider. Хотя я за собой персональную таскаю) На самом деле очень удачная альтернатива даже титану Visual Studio под виндами даже за свои деньги.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Я вот наоборот Rider не переношу. Когда сажусь за комп коллеги, постоянно от него плююсь, и хоткеи кардинально отличаются, и навигация. ИМХО студия 2019я очень продвинулась, и уже года полтора пользуюсь ей даже без решарпера, вполне удобно.

А VS Code активно использую параллельно - именно как текстовый редактор: поковырять json или xml, или фронт на ангуляре немного поковырять и запустить. Но с дебагом C# кода конечно до студии очень далеко.

показать ответы
0
Автор поста оценил этот комментарий

Спасибо. Надо будет преодолеть отвращение и посмотреть на него ещё раз)

А студия для меня, к сожалению, не очень вариант.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Напишите потом свои впечатления) интересно увидеть конструктивную критику

Автор поста оценил этот комментарий

TL;DR

Основные команды:

Ctrl-D - добавлять курсоры по одному, на каждое совпадение (с выделенным куском)

Ctrl-Shift-L - добавить курсоры на все совпадения

Alt-Enter (в окошке поиска) - добавить курсоры на все совпадения к запросу

показать ответы
1
Автор поста оценил этот комментарий

\b начало слова, а \W это не буквы, а то что Вы описали, можно в принципе одной регуляркой обойтись

раскрыть ветку (1)
Автор поста оценил этот комментарий

Согласен, конечно \W это "не-буквы". https://www.w3schools.com/jsref/jsref_regexp_wordchar_non.as...

Но по сути ищем "не-букву", за которой следует буква t, что и нужно в гипотетической задаче)

0
Автор поста оценил этот комментарий

Я нихуя не в тему, но вдруг кто увидит и подскажет. Нужен текстовый редактор, с упором на обработку текста регулярками. Тип окно исходного текста, к нему применяется регулярка и текст в другое окно, к которому можно тоже хуйнуть регулярку. Чтоб видеть процесс обработки (типо улучшенной версии sed).

Сейчас я последовательно перехуякиваю в notepad++, но хочется что-то удобнее.

раскрыть ветку (1)
Автор поста оценил этот комментарий

Но результат применения регулярки - это же не plain text, каким образом его выводить во второе окно? Под это, полагаю, нужно какую-то логику писать. Или "применение регулярки" - это просто замена?

показать ответы
0
Автор поста оценил этот комментарий

Что именно зависит от языка и чем лучше подходит?

раскрыть ветку (1)
Автор поста оценил этот комментарий

Кажется, спор вызван тем, что комментаторы говорят о разных вещах. VSC - это текстовый редактор, причем весьма универсальный. Тут можно кодить, редактировать xml/json, готовить статью в mardown, читать логи, править конфигурации, и много другого. Под него есть много дополнений, которые расширяют функциональность в определенном направлении.

Если же речь идет о конкретной задаче - программирование, для таких вещей есть более тяжелые IDE, заточенные на конкретные языки или платформы. В частности, для программирования например веб-приложения ASP.NET Core Web API на C# есть полновесная студия, которая конечно мощнее чем VSC.

показать ответы
Автор поста оценил этот комментарий

TL;DR

Основные команды:

Ctrl-D - добавлять курсоры по одному, на каждое совпадение (с выделенным куском)

Ctrl-Shift-L - добавить курсоры на все совпадения

Alt-Enter (в окошке поиска) - добавить курсоры на все совпадения к запросу

раскрыть ветку (1)
Автор поста оценил этот комментарий

@moderator возможно ли добавить это в конец поста? Полагаю, краткая шпаргалка может оказаться полезной читателям.

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества