2009-12-10 2 views
2

say У меня есть эта линиякак перевести слово в начало предложения в vim

= function (x, y, word);

, и я хочу, чтобы преобразовать его в

word = function (x,y); 

До сих пор, я вручную выбрать слово, затем «х», а затем вставьте его в начале. И тогда я удалю ненужную запятую.

Есть ли более эффективный способ совершить то же самое?

ответ

9

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

Мое решение будет: установите курсор на запятой, и тип: xxdw^Pa <C-[>

Описание:

  • xx - удалить запятую и пробел
  • dw - удалить слово
  • ^ - место курсор в начале текста в строке
  • P - место удаленный текст перед курсором
  • a - добавить пробел после слова
  • <C-[> - бежать, чтобы вернуться в нормальный режим, вы также можете нажать <ESC>, если вам нравится, или не нажимать на все

и как поместить курсор в запятую? Подробнее о F,, F,, т,, T,, ж, б и е двигаться быстрее вокруг вашего текста.

+1

Woot, это правда VIM Fu! – akuhn

0

Попробуйте следующее: :dw, чтобы сократить текущее слово, перейдите к началу строки, затем :p, чтобы вставить буфер там.

+0

Выполняет ли ': dw' автоматическую запятую? –

+0

': dw' не команда! – Benoit

1

Я предлагаю записать макрос: (начиная с начала строки) qq2f,2xdw0Pa <esc>0jq, а затем запускать этот макрос, где вам нужно: @q.

4
:%s/\(.*\),\([^)]*\)/\2\1/ 

EDIT: удалённые/г

EDIT2:% S в только, если вы хотите сделать это для всего файла. если вы просто хотите, чтобы сделать это для текущей строки, то замените % с . (точка)

+0

: s/\ (. * \), \ ([^)] * \)/\ 2 \ 1/g сделает результат немного более красивым. –

+0

+1, но andrei, вероятно, не хочет делать это во всех строках файла. (удалите% в начале). Но выполнение этого один раз, а затем либо переход вручную на следующую строку, требующую изменения, и нажатие & повторить замену или использование команды: g для выполнения изменения на нескольких строках, вероятно, полезно. –

+0

@rson. правильно, только разработчики не всегда добавляют правильное пространство, поэтому давайте сделаем это: s/\ (. * \),? \ ([^)] * \)/\ 2 \ 1 / –

0

Поместите курсор на слово и введите:

 
"0diw delete word and store it in register 0 
dF,  delete backwards up to and including , 
^  place cursor at first character in line 
"0P  paste word 

Я хотел бы предложить, чтобы сопоставить этот ключ.

0

Или вы можете использовать регулярное выражение.

:s/\(^.*\), \(\a\+\)\();\)/\2\1\3/ 

(Match до последней запятой) -> \ 1

(матч последний аргумент) -> \ 2

(Match закрывающей скобки и точка с запятой) -> \ 3

Изменение порядка согласованных условий по мере необходимости.