2017-01-20 312 views
2

這裏的a link我發現在這個問題的計算器。Vim中命令cw和ciw有什麼區別?

但我仍然不明白沒有一個具體的例子,「改變內心的詞」和「改變的詞」之間的區別是什麼。

我在我的vim中測試了這兩個命令,最後發現沒有區別,請給我一個例子來幫助我理解,謝謝!

+0

注意:[vi/vim知識](https://vi.stackexchange.com)有一個初始的SE網站 – chb

回答

9

下面是一個例子:

foo bar baz 
    ^

打字CW和CIW會給在這種情況下相同的結果(與位於「酒吧」的「B」的光標)。 考慮一下:

foo bar baz 
    ^

cw將產生

foo b baz 
    ^

其中ciw將產生

foo baz 
    ^

所以它改變了整個單詞,不管光標的位置。非常有用,我喜歡這個命令。 非常有用的也是caw(或aw)命令:

foo bar baz 
    ^
-> caw 
foo baz 
    ^

aw還包含的空間中。用v(visual)命令試試這些命令,看看它們都做了什麼。此外,閱讀motion.txt,部分6

+0

給我提供這麼多額外信息非常友好,非常感謝,我現在明白吧!這就像一個魔法! –

2
someword 
    ^  (cursor) 

CW從光標到字的結束

some_ 
    ^  (cursor) 

變化。留下這個詞的開頭。


相比

someword 
    ^  (cursor) 

CIW

_ 
^   (cursor) 

改變整個單詞從開始到結束。

2

以上的答案解決如何他們的行爲不同,我想和大家分享一些想法上爲什麼他們的行爲不同。

首先,Vim的世界,wiw有不同的語義,都可以看作是target(見下文):

  • wcwMotion對象
  • iwciw指到TextObject

其次,在Vim編輯中,操作c/change在你的情況,並y/yankd/delete=/indenting>/shifting等)和目標(在你的情況wiw)可以幫助你實現你想要用更少的按鍵做的比較使用visual selection + operator什麼。

TextObject定義目標範圍(開始和結束位置)。

Motion基本上用於移動光標,因此它只定義了最終目標位置(目標移動)。

一些很好的材料爲:

  1. :h motion.txt部分4,5
  2. AdvancedTopicTutorial從atom-vim-mode-plus
+0

'ciw' textobject是'iw'不''w'代表** i ** nner ** w ** ord –

+1

感謝您的糾正;) – Xlee

+1

您的回答讓我更清楚地瞭解這兩個命令是如何工作的,以及它們似乎很容易使用,但我從來沒有想過要找到這些命令的理論,這些命令在以前似乎很容易使用,在您的善意幫助下,我想我將更多地瞭解將來的任何事情,而不僅僅是工作!感謝你所做的一切!你激勵了我。 –

1

提個醒,cw默認情況下,有一個有點 '不規範' 行爲它的行爲完全像ce:它只能運行到當前單詞的結尾(如ece,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。打字çê實際上是更有效和小於尷尬Ç瓦特如果你形成你的無名指,而不是中指按壓Ë的習慣,當談到之後Ç


如果你寧願讓cw其默認分配複製ce,那麼你可以用一個額外的按鍵訪問它的「適當」的功能:dwi(或vwc)。

(請注意,我發現dwi更效率比cw因爲按鍵的位置輸入,儘管額外的密鑰。)


第二映射的說明:WShift + w)適用於vim所謂的「WORDS」,它計算每個非空白字符,例如標點符號,作爲WORD的一部分;而w適用於「單詞」,它只包含不間斷的字母,數字和下劃線序列(默認情況下)。

相關問題