Ответ 1
Если строки не начинаются с пробелов, вы можете заменить ' .*'
(который соответствует всем после первого слова) пустой строкой:
:%s/ .*//g
У меня есть текстовый файл, и я хочу удалить каждое слово, кроме первого слова в каждой строке, и я понятия не имею, как это сделать.
Итак, если у меня есть:
one two three
four five
six
Я хочу остаться с:
one
four
six
Есть идеи?
Если строки не начинаются с пробелов, вы можете заменить ' .*'
(который соответствует всем после первого слова) пустой строкой:
:%s/ .*//g
Более надежное решение состоит в том, чтобы отфильтровать его через программу, которая действительно хороша в таких манипуляциях: awk
.
Скажите, что у вас есть этот контент:
one two three
four five
six
Запустите :%!awk '{print $1}'
, и вы получите:
one
four
six
awk
Поля разделителя полей по умолчанию - это пробел, хотя вы можете изменить его на все, что захотите, в зависимости от того, что вам нужно.
В качестве альтернативы вы можете сделать это с помощью макроса.
Введите qa
в нормальном режиме, чтобы начать запись макроса в регистр a.
Затем введите 0elDj
, чтобы удалить все в текущей строке, кроме первого слова, и перейти к следующей строке.
Введите q
снова, чтобы закончить запись макроса.
Теперь вы можете запустить макрос в любой строке с помощью @a
.
Запустите :%norm! @a
, чтобы применить макрос к каждой строке в буфере.
Таким образом вы можете повторить любую сложную операцию, которую вы хотите, а не просто подставлять. Я люблю макросы:)
EDIT: Обратите внимание, что это не работает, если строка имеет строго менее 2 символов. По этой причине, как правило, это не лучший подход к этой проблеме.