Подтвердить что ты не робот

Удалите все, кроме первого столбца в VIM

У меня есть текстовый файл, и я хочу удалить каждое слово, кроме первого слова в каждой строке, и я понятия не имею, как это сделать.

Итак, если у меня есть:

one two three
four five
six

Я хочу остаться с:

one
four
six

Есть идеи?

4b9b3361

Ответ 1

Если строки не начинаются с пробелов, вы можете заменить ' .*' (который соответствует всем после первого слова) пустой строкой:

:%s/ .*//g

Ответ 2

Более надежное решение состоит в том, чтобы отфильтровать его через программу, которая действительно хороша в таких манипуляциях: awk.

Скажите, что у вас есть этот контент:

one two three

  four five
            six

Запустите :%!awk '{print $1}', и вы получите:

one

four
six

awk Поля разделителя полей по умолчанию - это пробел, хотя вы можете изменить его на все, что захотите, в зависимости от того, что вам нужно.

Ответ 3

В качестве альтернативы вы можете сделать это с помощью макроса. Введите qa в нормальном режиме, чтобы начать запись макроса в регистр a. Затем введите 0elDj, чтобы удалить все в текущей строке, кроме первого слова, и перейти к следующей строке. Введите q снова, чтобы закончить запись макроса.

Теперь вы можете запустить макрос в любой строке с помощью @a. Запустите :%norm! @a, чтобы применить макрос к каждой строке в буфере.

Таким образом вы можете повторить любую сложную операцию, которую вы хотите, а не просто подставлять. Я люблю макросы:)

EDIT: Обратите внимание, что это не работает, если строка имеет строго менее 2 символов. По этой причине, как правило, это не лучший подход к этой проблеме.