У меня есть файл, который выглядит так:
2067 24311 <hkxhk> {00}
2069 17219 <hkxhk> {00}
2071 20931 <hkxhk> {00}
2073 5557 <hkxhk> {00}
2075 2127 <hkxhk> {00}
2077 20947 <hkxhk> {00}
2081 18088 <hkxhk> {00}
Я хочу заменить значение первого столбца, чтобы оно выглядело как
5 24311 <hkxhk> {00}
5 17219 <hkxhk> {00}
5 20931 <hkxhk> {00}
5 5557 <hkxhk> {00}
5 2127 <hkxhk> {00}
5 20947 <hkxhk> {00}
5 18088 <hkxhk> {00}
Если первый столбец с разделителями пробелами был заменен новым значением, в данном случае 5.
Ответы:
Используя поиск и замену:
%s
- поиск по всему файлу,^
- начало строки,\S
- любой непробельный символ,\S*
- любое количество любых непробельных символов,5
- ваше новое значение.Использование макросов:
qq
- начать запись макроса с именемq
,0
- место курсор в начало строки,cw5
- замена ( с висящий) один ш Орд с5
,<Esc>
- вернуться в нормальный режим работы ,q
- конец записи макросов;%norm!
- применить команду нормального режима к каждой строке файла,@q
- выполнить макросыq
(команда нормального режима).Используя визуальный выбор, предполагая, что первый столбец имеет постоянную ширину (4 символа) :
gg0
- установить курсор в начало файла,<C-v>
- запустить режим выбора блока,G
- перейти к последней строке, чтобы выбрать столбец шириной в один символ (блок H × 1),3l
- перейти на три символа влево, чтобы выбрать блок H × 4,c5<Esc>
- заменить выбор в каждой строке5
и вернуться в нормальный режим.Заключение
Ваша проблема настолько проста, что подход поиска и замены оказался здесь самым простым, в то время как в общем случае запись макроса намного удобнее, чем изобретать регулярное выражение.
источник
Если вы работаете в Linux, Mac OSX или MINGw, или в любой системе, в которой есть этот
column
инструмент (и шансы очень высоки, если вы используете Vim), вы можете использовать его для колонки файла:column
это инструмент Linux для колонизации списков-t
Подсчитайте количество столбцов в файле.-s
При подсчете столбцов интерпретируйте это как текущий разделитель столбцов.-o
При изменении файла используйте это как новый разделитель столбцов.Вы можете запустить
command
инструмент прямо из командной строки. Например:Или вы можете запустить его из Vim в командном режиме:
:%!column -t -s "|" -o " | "
:
является стандартом для выполнения команды.%
влияет на все содержимое файла. Если вы пропустите его, вы будете выполнять операцию только на выбранных строках. Если нет выбранных строк, то вы будете влиять только на текущую строку.!
выполняет внешний инструмент.И, если ваш разделитель столбцов - это просто пробел, как в случае с оригинальным постером, то вам повезло, потому что используемый по умолчанию разделитель -
column
это именно пробел:источник