What does "vaw" mean in vim in normal mode (as well as "caw" and "daw")?

In my vim:

foo barba[r]bar foo 

[] indicates cursor position

and when I use vaw or viw, barbarbar is high level. And this is normal.

But I would like to understand - why? v for visual mode, a - I don’t know why and a normal approach to the beginning of a new word.

I also checked the spear and keel. First, delete barbarbar and leave the cursor after foo without a space, the second leaves the space after foo, both enter insert mode ...

So why does it work? Is there any link for this in vim help? Can anyone translate it into vim language?

+6
source share
3 answers

See :help text-object . This explains it all better than any guy here could.

Here is the whole section:

 6. Text object selection *object-select* *text-objects* *v_a* *v_i* This is a series of commands that can only be used while in Visual mode or after an operator. The commands that start with "a" select "a"n object including white space, the commands starting with "i" select an "inner" object without white space, or just the white space. Thus the "inner" commands always select less text than the "a" commands. These commands are {not in Vi}. These commands are not available when the |+textobjects| feature has been disabled at compile time. *v_aw* *aw* aw "a word", select [count] words (see |word|). Leading or trailing white space is included, but not counted. When used in Visual linewise mode "aw" switches to Visual characterwise mode. *v_iw* *iw* iw "inner word", select [count] words (see |word|). White space between words is counted too. When used in Visual linewise mode "iw" switches to Visual characterwise mode. *v_aW* *aW* aW "a WORD", select [count] WORDs (see |WORD|). Leading or trailing white space is included, but not counted. When used in Visual linewise mode "aW" switches to Visual characterwise mode. *v_iW* *iW* iW "inner WORD", select [count] WORDs (see |WORD|). White space between words is counted too. When used in Visual linewise mode "iW" switches to Visual characterwise mode. *v_as* *as* as "a sentence", select [count] sentences (see |sentence|). When used in Visual mode it is made characterwise. *v_is* *is* is "inner sentence", select [count] sentences (see |sentence|). When used in Visual mode it is made characterwise. *v_ap* *ap* ap "a paragraph", select [count] paragraphs (see |paragraph|). Exception: a blank line (only containing white space) is also a paragraph boundary. When used in Visual mode it is made linewise. *v_ip* *ip* ip "inner paragraph", select [count] paragraphs (see |paragraph|). Exception: a blank line (only containing white space) is also a paragraph boundary. When used in Visual mode it is made linewise. a] *v_a]* *v_a[* *a]* *a[* a[ "a [] block", select [count] '[' ']' blocks. This goes backwards to the [count] unclosed '[', and finds the matching ']'. The enclosed text is selected, including the '[' and ']'. When used in Visual mode it is made characterwise. i] *v_i]* *v_i[* *i]* *i[* i[ "inner [] block", select [count] '[' ']' blocks. This goes backwards to the [count] unclosed '[', and finds the matching ']'. The enclosed text is selected, excluding the '[' and ']'. When used in Visual mode it is made characterwise. a) *v_a)* *a)* *a(* a( *v_ab* *v_a(* *ab* ab "a block", select [count] blocks, from "[count] [(" to the matching ')', including the '(' and ')' (see |[(|). Does not include white space outside of the parenthesis. When used in Visual mode it is made characterwise. i) *v_i)* *i)* *i(* i( *v_ib* *v_i(* *ib* ib "inner block", select [count] blocks, from "[count] [(" to the matching ')', excluding the '(' and ')' (see |[(|). When used in Visual mode it is made characterwise. a> *v_a>* *v_a<* *a>* *a<* a< "a <> block", select [count] <> blocks, from the [count]'th unmatched '<' backwards to the matching '>', including the '<' and '>'. When used in Visual mode it is made characterwise. i> *v_i>* *v_i<* *i>* *i<* i< "inner <> block", select [count] <> blocks, from the [count]'th unmatched '<' backwards to the matching '>', excluding the '<' and '>'. When used in Visual mode it is made characterwise. *v_at* *at* at "a tag block", select [count] tag blocks, from the [count]'th unmatched "<aaa>" backwards to the matching "</aaa>", including the "<aaa>" and "</aaa>". See |tag-blocks| about the details. When used in Visual mode it is made characterwise. *v_it* *it* it "inner tag block", select [count] tag blocks, from the [count]'th unmatched "<aaa>" backwards to the matching "</aaa>", excluding the "<aaa>" and "</aaa>". See |tag-blocks| about the details. When used in Visual mode it is made characterwise. a} *v_a}* *a}* *a{* a{ *v_aB* *v_a{* *aB* aB "a Block", select [count] Blocks, from "[count] [{" to the matching '}', including the '{' and '}' (see |[{|). When used in Visual mode it is made characterwise. i} *v_i}* *i}* *i{* i{ *v_iB* *v_i{* *iB* iB "inner Block", select [count] Blocks, from "[count] [{" to the matching '}', excluding the '{' and '}' (see |[{|). When used in Visual mode it is made characterwise. a" *v_aquote* *aquote* a' *v_a'* *a'* a` *v_a`* *a`* "a quoted string". Selects the text from the previous quote until the next quote. The 'quoteescape' option is used to skip escaped quotes. Only works within one line. When the cursor starts on a quote, Vim will figure out which quote pairs form a string by searching from the start of the line. Any trailing white space is included, unless there is none, then leading white space is included. When used in Visual mode it is made characterwise. Repeating this object in Visual mode another string is included. A count is currently not used. i" *v_iquote* *iquote* i' *v_i'* *i'* i` *v_i`* *i`* Like a", a' and a`, but exclude the quotes and repeating won't extend the Visual selection. Special case: With a count of 2 the quotes are included, but no extra white space as with a"/a'/a`. When used after an operator: For non-block objects: For the "a" commands: The operator applies to the object and the white space after the object. If there is no white space after the object or when the cursor was in the white space before the object, the white space before the object is included. For the "inner" commands: If the cursor was on the object, the operator applies to the object. If the cursor was on white space, the operator applies to the white space. For a block object: The operator applies to the block where the cursor is in, or the block on which the cursor is on one of the braces. For the "inner" commands the surrounding braces are excluded. For the "a" commands, the braces are included. When used in Visual mode: When start and end of the Visual area are the same (just after typing "v"): One object is selected, the same as for using an operator. When start and end of the Visual area are not the same: For non-block objects the area is extended by one object or the white space up to the next object, or both for the "a" objects. The direction in which this happens depends on which side of the Visual area the cursor is. For the block objects the block is extended one level outwards. For illustration, here is a list of delete commands, grouped from small to big objects. Note that for a single character and a whole line the existing vi movement commands are used. "dl" delete character (alias: "x") |dl| "diw" delete inner word *diw* "daw" delete a word *daw* "diW" delete inner WORD (see |WORD|) *diW* "daW" delete a WORD (see |WORD|) *daW* "dd" delete one line |dd| "dis" delete inner sentence *dis* "das" delete a sentence *das* "dib" delete inner '(' ')' block *dib* "dab" delete a '(' ')' block *dab* "dip" delete inner paragraph *dip* "dap" delete a paragraph *dap* "diB" delete inner '{' '}' block *diB* "daB" delete a '{' '}' block *daB* Note the difference between using a movement command and an object. The movement command operates from here (cursor position) to where the movement takes us. When using an object the whole object is operated upon, no matter where on the object the cursor is. For example, compare "dw" and "daw": "dw" deletes from the cursor position to the start of the next word, "daw" deletes the word under the cursor and the space after or before it. 

Please note that you can create your own text objects using two commands (for example, you would like β€œK” to be a new text object: when in operator mode you want to select three characters with the cursor in the center and on the visual you want to expand selection for 1 character at both ends (provided that your cursor is at the end of the selection):

 "operator-pending mapping onoremap K :normal! hv2l<return> "visual mapping (xmap preferred over vmap because vmap also works in select mode) "note that in visual mode o goes to the other end. Therefore this will expand selection if you were at the end and restrict it otherwise. xnoremap K ohol 
+22
source

This is due to text objects.

  • vaw means "select (Visual) Word (including the following spaces)"
  • caw means "Change the word (including the following spaces)"
  • daw means "Delete a word (including the following spaces)"

If you use "i", this is the same, except that it is an "internal" choice, so it does not select surrounding spaces.

There are other text objects:

  • p for paragraph
  • s for suggestion
  • b for block
  • (for parentheses
  • ] for brackets
  • etc.

So you do dip to delete the current paragraph.

See :help text-objects more details.

This is a pretty powerful Vim feature. When you master text objects, you are going to use them for most operations. For example, if you want to reformat a function (C like), you can use =i} and it does! (= this is the refomat command, and i} is the region of the current {block)

+6
source

Cm

 :he text-objects 

vaw - select the word "around." viw - select the "inner" word.

In the above example, the difference between the two operations will not be displayed.

Try using a single or double cable word and you will see the difference:

 "Sasq[u]atch" 

Try viw and vaw on above and you will see it.

+2
source

Source: https://habr.com/ru/post/896384/


All Articles