Why lowercase [i] does not work in visual block mode?
Asked Answered
O

2

4

I often forget how to insert in visual block mode and read again the answer Shift+i.

As Honghe.Wu wonders in his comment:

Why lowercase i does not work in visual mode?

What is the technical reason?

Overglaze answered 5/2, 2015 at 10:11 Comment(0)
N
6

The reason because i and a are not behave like in normal mode in all visual modes is that i and a are used to extend the selection to text objects. As you can see in :help visual-operators:

4. Operating on the Visual area

The operators that can be used are:
    ~   switch case                 
    d   delete                      
    c   change (4)                  
    y   yank                        
    >   shift right (4)                 
    <   shift left (4)                  
    !   filter through external command (1)     
    =   filter through 'equalprg' option command (1)    
    gq  format lines to 'textwidth' length (1)      

The objects that can be used are:
    aw  a word (with white space)           
    iw  inner word                  
    aW  a WORD (with white space)           
    iW  inner WORD                  
    as  a sentence (with white space)           
    is  inner sentence                  
    ap  a paragraph (with white space)          
    ip  inner paragraph                 
    ab  a () block (with parenthesis)           
    ib  inner () block                  
    aB  a {} block (with braces)            
    iB  inner {} block                  
    at  a <tag> </tag> block (with tags)        
    it  inner <tag> </tag> block            
    a<  a <> block (with <>)                
    i<  inner <> block                  
    a[  a [] block (with [])                
    i[  inner [] block                  
    a"  a double quoted string (with quotes)        
    i"  inner double quoted string          
    a'  a single quoted string (with quotes)        
    i'  inner simple quoted string          
    a`  a string in backticks (with backticks)      
    i`  inner string in backticks           

Additionally the following commands can be used:
    :   start Ex command for highlighted lines (1)  
    r   change (4)                  
    s   change                      
    C   change (2)(4)                   
    S   change (2)                  
    R   change (2)                  
    x   delete                      
    D   delete (3)                  
    X   delete (2)                  
    Y   yank (2)                    
    p   put                     
    J   join (1)                    
    U   make uppercase                  
    u   make lowercase                  
    ^]  find tag                    
    I   block insert                    
    A   block append                    

So just use the block insert uppercase I or the the block append uppercase A commands in visual block mode.

Niklaus answered 14/8, 2015 at 2:17 Comment(0)
P
5

The i command inserts before the cursor position. In visual block mode, the cursor position (usually) represents the bottom right corner of the selection, and the cursor position is included in the block.

So, the semantics of i wouldn't match, and that's why it was left out of the Vim implementation (adding that would probably be a simple one-line change to the source code). The semantics do match for I (insert before any text) and A (insert after any text), that's why those are available in visual block mode.

Purpurin answered 5/2, 2015 at 10:25 Comment(2)
Excellent explanation. For some reason I hadn't questioned it before, I just got used to the available keys.Concinnity
Also there is the fact that 'I' starts a text object when in any visual mode.Torre

© 2022 - 2024 — McMap. All rights reserved.