2013-06-10 3 views
2

У меня есть длинный ряд слов, глядя, как это:Помещенные слова, разделенные запятыми, в кавычках

foo,foo bar,[email protected],foo# bar,bar$ foo# 

Теперь я хотел бы, чтобы превратить его в:

"foo","foo bar","[email protected]","foo# bar","bar$ foo#" 

Таким образом, разделитель - это запятая. Каков наилучший способ сделать это в vi(m)?

EDIT: Может кто-нибудь задуматься о нижних горизонтах?

+0

Да, есть люди, которые меняют вопросы и ответы, по моему мнению, без какой-либо причины, как и ваши. Что случилось с вашим вопросом? Я не знаю. Его i.m.o. правильный вопрос. – Reman

+0

Единственное, что я могу придумать, это «то, что вы пробовали», - но этот вопрос действительно не поддается такому процессу. –

ответ

6

Это похоже на работу. Захватите все, что не является запятой, и замените его на захваченную часть в кавычках. g в конце команды говорит заменить все экземпляры, соответствующие регулярному выражению на линии. Без g он будет соответствовать только первому. Посмотрите на :h :s и :h :s_flags

:%s/\([^,]\+\)/"\1"/g 

Вход:

foo,foo bar,[email protected],foo# bar,bar$ foo# 

Выход:

"foo","foo bar","[email protected]","foo# bar","bar$ foo#" 
+0

+1 Прекрасно! –

+0

Я делаю что-то не так? Когда я вставляю вашу команду, она только окружает первое слово кавычками и оставляет остальное как есть. Мой результат: '" foo ", foo bar, bar @ foo, foo # bar, bar $ foo #' – cherrun

+0

@cherrun вы забыли 'g' в конце? – FDinoff

0

Try:

for l in range(1, line('$')) | 
    call append(line('.') - 1, join(map(split(getline('.'), ','), '"\"" . v:val . "\""'), ',')) | 
    delete | 
endfor 

Объяснение:

Для каждой строки линии разделения с запятой, добавьте ведущие и замыкающие двойные кавычки, используя map функцию, присоединиться к ним с запятой и добавить его выше текущей строки , а затем удалите текущую строку курсора, которая будет старой.

0

Самый быстрый способ сделать простые вещи в Vim является использование макросов; это занимает меньше времени, чем изучение того, как определять функции или определять шаблон поиска и замены.

В командном режиме
Переместить курсор в начало строки 0
начала записи макроса как макро в qa
Вставьте кавычка i"
Переместить в толстой кишке или в конце линии /.,\|$<Enter>
присоединять КАВЫЧКА a"
Переход к началу следующей ячейки ll
остановить запись макроса q

Теперь вы преобразовали первую ячейку и записали макрос. Для преобразования другой ячейки @a (или @@, что означает запуск последнего использованного макроса). Как только вы достигнете конца строки, перейдите к началу следующей строки.

0

Помимо начала и конца строки, s/,/","/g будет делать. Поэтому я полагаю, все зависит от того, ищете ли вы быстрый и грязный хак, чтобы выполнить задание один раз, или вы ожидаете, что это будет задание, которое вам нужно повторить много.

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