2017-01-20 6 views
2

Вот a link Я нашел в stackoverflow об этом вопросе.В чем разница между командой cw и ciw в Vim?

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

Я тестирую эти две команды в своем vim и, наконец, не нахожу различий, пожалуйста, дайте мне пример, чтобы помочь мне понять, спасибо!

+0

NB: существует зарождающийся сайт SE для [vi/vim knowledge] (https://vi.stackexchange.com) – chb

ответ

9

Вот пример:

foo bar baz 
    ^

Typing CW и CIW даст тот же результат в этом случае (с курсором, расположенным на «B» «в строке»). Рассмотрим это:

foo bar baz 
    ^

cw даст

foo b baz 
    ^

где ciw даст

foo baz 
    ^

так он изменяет слово целиком, независимо от положения курсора. Очень полезно, мне нравится эта команда. Очень полезным является также caw (или aw) команду:

foo bar baz 
    ^
-> caw 
foo baz 
    ^

aw также содержит пространство. Попробуйте эти команды с помощью команды v (визуальный), чтобы увидеть, что они все делают. Кроме того, прочитайте motion.txt, часть 6.

+0

Очень любезно с вашей стороны предоставить мне столько дополнительной информации, спасибо вам большое, я поймите это сейчас! Это похоже на волшебство! –

2
someword 
    ^  (cursor) 

непрерывного

some_ 
    ^  (cursor) 

Изменения от курсора до конца слова. Оставляет начало слова.


По сравнению с

someword 
    ^  (cursor) 

CIW

_ 
^   (cursor) 

изменяет слово целиком от начала до конца.

2

Выше ответы адресованный КАК они ведут себя разные, я хотел бы поделиться некоторое представление о ПОЧЕМУ они ведут себя по-другому.

Во-первых, в мире VIM, в w и iw имеют различную семантику и оба могут рассматриваться как target (смотри ниже):

  • w в cw относится к Motion Object
  • в то время как iw в ciw относится до TextObject

Во-вторых, в редакции Vim, Оператор (c/change в вашем случае, и y/yank, d/delete, =/indenting, >/shifting и т.д.) и Target (w и iw в вашем случае) поможет вам добиться того, что вы хотите сделать с меньшим количеством нажатий клавиш по сравнению с использованием visual selection + operator.

TextObject определяет целевой диапазон (начальное и конечное положение).

Движение по существу используется для перемещения курсора, поэтому оно определяет только конечную цель-цель (пункт назначения для перемещения).

Некоторых хороших материалов для чтения:

  1. :h motion.txt части 4, 5
  2. AdvancedTopicTutorial из atom-vim-mode-plus
+0

В 'ciw' текстовый объект' iw' не 'w', который обозначает ** i ** nner ** w ** ord –

+1

Спасибо за исправление;) – Xlee

+1

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

1

заметь, cw имеет 'нестандартное' поведение битного по умолчанию в том, что он ведет себя точно так же, как ce: он работает только до конца текущего слова (например, e, ce, de, ye) вместо включения пробелов перед началом следующего слова (например, w, dw, yw).

Поэтому я рекомендую добавить эти отображения к вашему vimrc:

" Have `cw` adhere to its actual movement `w`, instead of duplicating `ce`. 
nnoremap cw dwi 
nnoremap cW dWi 

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


Если вы хотите оставить cw с его назначение по умолчанию дублирования ce, то вы можете получить доступ к его «правильной» функции с дополнительным нажатием клавиши: dwi (или vwc).

(Имейте в виду, я считаю dwi еще более эффективным типа, чем cw из-за позиции ключей, несмотря на дополнительный ключ.)


Объяснение второго отображения: W (Shift + w) работает над тем, что vim называет «СЛОВАМИ», которое подсчитывает каждый непустой символ, например пунктуация, как часть СЛОВА; а w работает с «словами», которые состоят только из непрерывных последовательностей букв, цифр и символов подчеркивания (по умолчанию).