2012-01-05 3 views
6

Я часто кусок кода, как это:Как эффективно удалить слово, двоеточие и запятую в VIM

it "should do something", :focus do 
    ... 
end 

Когда я хочу, чтобы удалить , :focus Я обычно

  1. Перейти к строке 1: 1G
  2. Перейти к двоеточию: f:
  3. Удалить двоеточие (используя вокруг слова, так что я могу повторить): daw
  4. Удалить focus (просто повторите предыдущий): ..
  5. Удалить запятую (переместить влево и заменить ее пробелом): hr<SPACE>.

Есть ли способ, которым шаги 3-5 могут быть достигнуты более эффективно?

+2

Не прямо ваш вопрос, а ярлык для шага 1: 'gg', т.е.нажмите одну и ту же клавишу дважды, вместо того, чтобы нажимать две разные клавиши ... – Nigu

+0

Да, конечно. Спасибо за это. Я использовал f, чтобы подчеркнуть, что код не будет в первой строке. Это просто здесь, в вопросе :) –

ответ

8

Вы можете пойти:

  1. 1G, чтобы перейти к первой строке
  2. f, идти к запятой
  3. dE удалить до следующего конца СЛОВА (WORD прописных букв является любой последовательностью символов, не пробел).
+0

'dE' отлично работает здесь. Еще лучше, чем предложил @rejj. Но я не совсем понимаю, почему именно 'E' перескакивает через запятую, двоеточие и слово. Был бы признателен, если бы вы могли это объяснить. Также что противоположно 'E' (двигаться в противоположном направлении)? –

+1

'E' и' B' идут в конец (вперед) и начинают (назад) СЛОВА. 'gE' и' W' идут до конца предыдущего WORD и начала следующего WORD. ': help E',': help B', ': help gE',': help W' скажет вам! Обратите внимание, что есть только те же команды без заглавной буквы ('w',' b', 'ge' и' e'), для которых определение того, что такое слово, отличается (знаки пунктуации не являются частью слов: ' : help word' и ': help WORD'). – Benoit

3

С курсором на , вы могли бы сделать ст, х, х, д.

или d, , е

+0

Ох, так просто :) !! Почему-то я редко думаю, что запятая и двоеточие являются словами :) Большое спасибо! –

0

Вы бы лучше показать, где находится курсор, но при условии, что это после того, как "конец", я бы это сделать:

?",<CR>ldt<space>. 
+0

Я показал, где находится курсор. Это на двоеточие. См. Шаг 2 в вопросе. Поиск - очень неточное движение и нарушает мой поток. Что такое 'ldt ' делать? –

+0

Я вижу, что 'ldt ' есть. Не поймал его сначала. С 'ldt ' вам все равно нужно вернуться назад и удалить запятую. Это похоже на то, что я делал в этом вопросе. –

1

С курсором или толстой кишки вы можете сделать dF,DE. dF, часть будет удаляться назад до запятой и включать ее. Затем dE удалит до следующего символа пробела. Самое приятное в этом состоит в том, что если нет предшествующей запятой, это все равно будет делать то же самое. Так с кодом

if :focus, "should do something" do 

Если курсор находится на толстой кишке этот макрос будет удалить только :focus, часть, хотя он оставит два пространства позади.

+0

Ницца! Подобно предложению @Benoit. –

+0

Я должен обновляться чаще: P –

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