Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How can I insert a real tab character in Vim?

When I have my vimrc here:

set tabstop=2 set shiftwidth=2 set softtabstop=2 set expandtab set smarttab 

And I have supertab plugin installed. Whenever I am in insert mode I press tab, it shows the auto completion, but sometimes I would like to insert a real tab character in a string literal like. So what I mean whenever I press tab in double quotes string literal, it should input we a real tab character.

like image 890
Samnang Avatar asked Aug 05 '11 05:08

Samnang


People also ask

How do I insert a tab instead of spaces in Vim?

In short: set et and set noet to switch tab and space as need.

What is the tab character in Vim?

Vim's behavior is to repeat or omit the second character ( ▷ ), which means: A Tab character on a file that the indentation is set to occupy two screen spaces, will display ▷⋮ . A Tab character on a file that the indentation is set to occupy four screen spaces, will display ▷▷▷⋮ .


2 Answers

While in insert mode or command mode (the : prompt at the bottom of the editor), type CTRL + V then TAB.

Using CTRL + V signals Vim that it should take the next character literally. Even in insert mode.

UPDATE:

As noted by Herbert Sitz, if gVim is in Windows mode (default), you must use CRTL + Q in place of CTRL + V.

like image 102
Jason Down Avatar answered Sep 18 '22 18:09

Jason Down


@Samnang: I have a similar setup as you; unfortunately, Jason's answer did not work, for me.

This is a workaround:

  • Substitute some character (e.g. a backtick: `) or characters (e.g. a unique alphanumeric string: zzz) where you want your tab(s)
  • Select the text (Visual mode) and do a search/replace,

    :'s/`/\t/g

Updated answer, inspired by @Cyryl1972 's comment.

Insert tab at beginning of all lines (note also: no need to select lines, for any of the following code, as that's included in the line matching part of the expression):

:1,$s/^/\t\1/ 

Inert tab after first 10 characters in all lines:

:1,$s/^\(.\{10}\)/\1\t/ 

Explanation - first part:

:1,$      Match from line 1 to end of file ^(.{10}   Collect (preserve) all text from beginning of line to position 10           (you need to escape the parentheses, \( and \), as well the FIRST           (left) curly brace, only: \{ -- as it, { , appears to have special           meaning in regex when used for this purpose 

Explanation - second part:

/1        Add back the preserved text \t        Insert a tab 

... and the rest of the line is automatically restored, as well.

Current line, only:

:s/^/\t\1/ 

Example: insert tab at position 10 (0-indexed) at lines 2-4:

1234567890abcdefghij  1234567890abcdefghij  1234567890abcdefghij  1234567890abcdefghij  1234567890abcdefghij   :2,4s/^\(.\{10}\)/\1\t/  1234567890abcdefghij  1234567890  abcdefghij  1234567890  abcdefghij  1234567890  abcdefghij  1234567890abcdefghij  

References (StackOverflow):

  • Replace character in specific position with another character using regular expression, Vim
  • How do I add a character at a specific postion in a string?

References (other):

  • Regex Cheat Sheet
like image 24
Victoria Stuart Avatar answered Sep 22 '22 18:09

Victoria Stuart