#visual-studio-code #vscode-extensions
Вопрос:
Мне нужно запустить VSCode через некоторый XML, который по крайней мере на 90% генерируется автоматически. Есть несколько вещей, которые автоматическая генерация не может определить самостоятельно и требует ручного вмешательства при ручном редактировании, когда на каждой записи будет сгенерирован определенный фрагмент текста.
То, что я пытаюсь сделать, это найти способ (через расширение или через встроенные команды), чтобы настроить сочетание клавиш, которое будет перемещать курсор на следующую экземпляр конкретную фразу моего выбора (что я бы не набирать текст вручную; он будет назначен в рамках keybind) в текущем файле , когда я нажимаю на привязку к нему.
Например, нажмите F17, чтобы перейти к следующему экземпляру «FIXME» в текущем документе.
Я просмотрел по меньшей мере дюжину расширений и не нашел ничего, что соответствовало бы моим потребностям, а встроенный actions.find
не поддерживает параметры. actions.findWithSelection
требуется, чтобы текст был выделен, так что это тоже не сработает.
Есть какие-нибудь идеи? У кого-то наверняка была такая же потребность в этом в какой-то момент. По крайней мере, я не могу рассматривать это как редкую потребность.
Ответ №1:
Я изменил другое расширение, о котором я упоминал, «Найти и преобразовать«, чтобы сделать это действительно простым. С помощью этой привязки ключей
{
"key": "alt r",
"command": "findInCurrentFile",
"args": {
"find": "FIXME",
// "replace": "DONE",
"restrictFind": "nextMoveCursor"
}
}
или
{
"key": "alt r",
"command": "findInCurrentFile",
"args": {
// "find": "FIXME", // no find necessary !!
// "replace": "DONE",
"restrictFind": "nextMoveCursor"
}
},
В первом примере используется фиксированный find
и будет переходить к следующему FIXME
, где бы ни находился курсор, и он будет перенесен в начало файла, если в остальной части файла нет совпадений.
Во втором примере будет использоваться слово под курсором, и, следовательно, требуется, чтобы вы начинали FIXME
, например, со слова.
Первая демонстрация (со значением поиска):
Вторая демонстрация (без поиска, обратите внимание, что при поиске используются слова под курсором):
Расширение может сделать гораздо больше. По ссылке выше приведено много примеров.
{
"key": "alt r",
"command": "findInCurrentFile",
"args": {
"find": "FIXME",
// "replace": "DONE",
"restrictFind": "nextSelect"
}
}
nextSelect
Опция будет переходить и выбирать совпадения по очереди, чтобы вы могли изменить некоторые из выбранных параметров, а затем перейти к следующему.
Я думаю, что это расширение (которое я написал) — это то, что вы ищете: перейдите и выберите.
Пример привязки клавиш (без дополнительного выбора фразы):
{
"key": "alt r", // whatever keybinding you wish
"command": "jump-and-select.jumpForward",
"args": {
"text": "FIXME",
// "restrictSearch": "document",
}
},
[Если вы действительно хотели найти все совпадения и при необходимости заменить их заранее определенным регулярным выражением найти/заменить, см. раздел Поиск и преобразование.]
Ответ №2:
Вы, скорее всего, ищете Переместить Последний выбор В Следующий Поиск соответствия ( editor.action.moveSelectionToNextFindMatch
), по умолчанию привязанный к ctrl k ctrl d. Противоположное направление ( editor.action.moveSelectionToPreviousFindMatch
) не имеет привязки по умолчанию.
Лично я использую Ctrl Shift vertical arrowsих для этого, и поверьте мне на слово, я использую их все время. keybindings.json
отрывок:
{
"command": "editor.action.moveSelectionToPreviousFindMatch",
"key": "ctrl shift up",
"when": "editorFocus"
},
{
"command": "editor.action.moveSelectionToNextFindMatch",
"key": "ctrl shift down",
"when": "editorFocus"
},
Действительно, эти имена команд совершенно невозможно найти в палитре команд, когда вы просто хотите «перейти к следующему вхождению слова или выделению под курсором». Это за пределами понимания, как они получили такие запутанные имена.
Поздравляю с первым вопросом, кстати!
Комментарии:
1. Спасибо. Похоже, мне все равно придется вручную выделить первую запись, но после этого она будет работать. Это выполнимо, но если у кого-то есть какие-либо другие предложения, я тоже прислушиваюсь к ним.
2. ДА. Но, по крайней мере, первый вызов с пустым выделением молча «расширяет выделение», поэтому с помощью простого ярлыка вам нужно просто вызвать его дважды, чтобы фактически перейти к следующему вхождению. Я думаю, что это вполне терпимо и дает вам точную обратную связь о том, куда вы собираетесь перейти.