2016-11-18 3 views
-1
:%s/^\s\{4\}//g 

Он может заменить четыре пробела в начале строки с нулевым пробелом. Мы делаем вывод, что \s = пробелы \{4\} = четыре раза. s и пробелы в vim

:%s/^\s\{4\}/ /g 

Он может заменить четыре пробела в начале строки двумя пробелами.
И очевидно, что \s\{2\} = два белых пробела.

:%s/^\s\{4\}/\s\{2\}/g 

Почему команда не может заменить четыре пробела в начале строки двумя пробелами? Почему команда означает, что заменить четыре пробела в начале строки на s {2}?

ответ

2

\s обозначает любой символ пробела, такой как вкладка или пробел. У vim нет способа узнать, какой символ вы хотите использовать при замещении.

Для замены с таким же характером, используйте :%s/^\(\s\)\{4\}/\1\1/g

+0

новую идею, более разумный способ, чем другие. –

2

Интуитивно, если вы можете купить яблоко за доллар, почему вы не можете есть доллар, и вы можете есть яблоко?

Технически команда замены [range]s[ubstitute]/pattern/replacement/[flags] [count] интерпретирует pattern и replacement по-разному. Шаблон представляет собой регулярное выражение (:help pattern); замена не производится (:help sub-replace-special). \s - пробел в регулярном выражении, но не в замене.

3

Что имеет смысл в части шаблона s/.../.../, не обязательно имеет смысл в заменяемой части. Шаблон - это (идея Vim) регулярного выражения. Замена - это строка с некоторыми специальными ярлыками. Очень разные звери.

Смежные вопросы