Вы действительно ищете средство форматирования для этих двух функций: форматирование по типу и форматирование при сохранении. Однако вы можете получить первую функцию - «ограничить ввод более одного пробела в коде Visual Studio, если только он не находится перед первым непробелом в строке» с помощью расширения HyperSnips .
Для настройки этого расширения см. { ссылка }
Затем, скажем, в вашем all.hsnips
файле поместите это:
snippet `(\S)( ){2,}` "found 2 consecutive spaces with no non-whitespace characters preceding" A
``rv = m[1] + " "``
endsnippet
Это будет работать во всех языковых файлах вы можете ограничить его определенными языками, как указано в этом ответе, связанном с.
Запустите команду HyperSnips: Reload Snippets
.
В основном вы используете фрагмент, который использует (\S)( ){2,}
как префикс. Он будет срабатывать всякий раз, когда он обнаруживает два или более пробелов в строке и заменяет их только одним!
Фрагмент будет срабатывать только в том случае, если этим двум пробелам предшествует непробельный символ (так что некоторый символ) и, следовательно, ваше второе требование, чтобы перед первым символом в строке было разрешено несколько пробелов.
Это также работает между существующими словами , если вы go там редактируете - вы не сможете чтобы добавить пространство к существующему!
Демо:

The gif doesn't really capture it well but every time I am trying to write a second consecutive space it deletes it leaving only the one.
Your second question was "if you open a file that was like that already I want those multispaces to be removed when saved".
I suggest running a script on save. Using, for example, Запуск при сохранении задачи . В ваших настройках:
"triggerTaskOnSave.tasks": {
"stripSpaces": [
"**/*.txt" // here restricting it to .txt files
],
},
Это запускает задачу stripSpaces
, когда вы сохраняете файл .txt
. Эта задача (в задачах. json) может выглядеть так:
{
"label": "stripSpaces",
"type": "shell",
"command": "awk -f stripSpaces.awk ${relativeFile} > temp; mv temp ${relativeFile}"
}
, который запускает этот stripSpaces.awk
скрипт:
# strip multiple consecutive spaces from a file
# unless they are the beginning of the line
BEGIN {
regex="\\S( ){2,}";
}
{
if (match($0,regex)) {
gsub(/( ){2,}/, " ")
print
}
else print
}
Демо:
пробелы в awk при сохранении демо