Vi: Difference between revisions
Jump to navigation
Jump to search
(→Links) |
(→Some Stuff to Add in ~/.vimrc file: deleted) |
||
Line 199: | Line 199: | ||
| |
| |
||
|} |
|} |
||
== Some Stuff to Add in <tt>~/.vimrc</tt> file == |
|||
''(remarks: command in <tt>~/.vimrc</tt> file must not be prefixed with a colon :)'' |
|||
* To enable syntax highlighting + numbering: |
|||
syntax enable |
|||
set bg=light ''" Use set bg=dark if console background color is dark'' |
|||
set number |
|||
* To have the 'usual' backspace/delete behaviour regarding EOL (see [http://comments.gmane.org/gmane.editors.vim/33436] and [http://www.cygwin.com/ml/cygwin/2005-06/msg00541.html]): |
|||
set bs=2 ''" Delete at EOL joins line / BS at BOL joins line |
|||
* To remap movement key bindings to JKLM (instead of HJKL, so that they are right under right hand fingers on ''AZERTY'' keyboards). Commands on key 'M' are now on key 'H'. |
|||
nnoremap j h |
|||
nnoremap k j |
|||
nnoremap l k |
|||
nnoremap m l |
|||
nnoremap h m |
|||
vnoremap j h |
|||
vnoremap k j |
|||
vnoremap l k |
|||
vnoremap m l |
|||
vnoremap h m |
|||
* Regarding tabs (ref: [http://tedlogan.com/techblog3.html]) |
|||
set tabstop=4 softtabstop=4 shiftwidth=4 noexpandtab |
|||
:Note that tabs settings can also be specified on a per-file basis using special vim incantation: |
|||
<source lang="c"> |
|||
/* vim: tabstop=8:softtabstop=8:shiftwidth=8:noexpandtab */ |
|||
</source> |
|||
* Indentation stuff - Use one of the following (ref: [http://blogs.gnome.org/johannes/2006/11/10/getting-cool-auto-indent-in-vim/]): |
|||
set autoindent ''" Indent is based on the previous line'' |
|||
set smartindent ''" Same as above but also recognize some C syntax'' |
|||
set cindent ''" Even clever C indent mode'' |
|||
set cinkeys=0{,0},:,0#,!,!^F ''" For cindent - specifies which keys trigger reindenting'' |
|||
* Enable omni and keyword completion in vim (see [http://stackoverflow.com/questions/510503/ctrlspace-for-omni-and-keyword-completion-in-vim]) (here remapped to <code>Ctrl-L</code>, use <code><C-@></code> or <code><nul></code> to remap to Ctrl-Space): |
|||
inoremap <expr> <C-L> pumvisible() \|\| &omnifunc == '' ? |
|||
\ "\<lt>C-n>" : |
|||
\ "\<lt>C-x>\<lt>C-o><c-r>=pumvisible() ?" . |
|||
\ "\"\\<lt>c-n>\\<lt>c-p>\\<lt>c-n>\" :" . |
|||
\ "\" \\<lt>bs>\\<lt>C-n>\"\<CR>" |
|||
* Smart-TAB, inspired from here [http://vim.wikia.com/wiki/Smart_mapping_for_tab_completion]. Here Tab does auto-completion if the character before cursor is a word character. Otherwise it inserts a tab as usual: |
|||
function! CleverTab() |
|||
if pumvisible() |
|||
return "\<C-N>" |
|||
endif |
|||
let line=strpart( getline('.'), 0, col('.')-1 ) |
|||
if !(line =~ '^.*[a-zA-Z0-1_]$') "completion only if last char is a word char |
|||
return "\<Tab>" |
|||
elseif exists('&omnifunc') && &omnifunc != '' |
|||
return "\<C-X>\<C-O>" |
|||
else |
|||
return "\<C-N>" |
|||
endif |
|||
endfunction |
|||
inoremap <expr> <Tab> CleverTab() |
|||
* Avoid the ESC key: |
|||
''"Press Ctrl-Space instead of ESC (because Shift-Space only work in GUI).'' |
|||
''"See http://vim.wikia.com/wiki/Avoid_the_escape_key'' |
|||
''"- nnoremap causes Ctrl-Space to cancel any prefix keys'' |
|||
nnoremap <nul> <Esc> |
|||
''"- vnoremap causes Ctrl-Space to cancel any selection (gV is required to prevent automatic reselection)'' |
|||
vnoremap <nul> <Esc>gV |
|||
''"- onoremap causes Ctrl-Space to cancel any operator pending commands (like y) '' |
|||
onoremap <nul> <Esc> |
|||
''"- inoremap causes Ctrl-Space to exit insert mode and `^ restore cursor position (cursor does not move left)'' |
|||
inoremap <nul> <Esc>`^ |
|||
== Miscellaneous Tips and Tricks == |
== Miscellaneous Tips and Tricks == |
Revision as of 13:53, 29 April 2010
Links
- General
- My links on vi on del.icio.us.
- Official vim homepage.
- Fun
- Vi would not be vi without a bit of fun...
- Guides & Cheat sheets
- Very good post explaining why vi is superior and defeating common misconception (with examples) [1].
- Very good graphical cheatsheet
- Direct links: overview and per-lesson.
- Avoiding the ESC key [2]
- Vim map tutorial [3]
- Manual & Doc
- Examples
Keyboard Shortcuts
Miscellaneous
! If keys HJKLM have been remapped to MHJKL, shortcut below must be changed accordingly !
Shortcut | Description | Custom |
---|---|---|
Ctrl+[ | Same effect as Esc, but a bit faster/easier to type. Works on AZERTY keyboard in Windows, but not on Linux. | |
Ctrl+c | Same effect as Esc, but a bit faster/easier to type. Also works on AZERTY keyboard | |
Ctrl+Space | Same effect as Esc, but a bit faster/easier to type (see [5]). | Yes |
Ctrl+L | Omni and keyword completion. | Yes |
* | Search next occurence of word under cursor (Here more like this...) | |
# | Search previous occurence of word under cursor | |
gd | Search first occurence of current search | |
^d<BS> | Concatenate current line at the end of previous lines (assuming <BS> does wrap-around. See option whichwrap) | |
J | Concatenate current line with next line | |
/ ↑ | Recall previous search string | |
: ↑ | Recall previous command | |
. | Redo last command | |
Ctrl + o | to execute more commands (see [6]) |
Block Indenting
(ref: [7])
Shortcut | Description | Custom |
---|---|---|
>> | Indent current line | |
5>> | Indent 5 lines | |
Vjjjj>> | Indent 5 lines - same as above but using visual mode | |
>% | (while cursor is on a curly brace) Indent a curly-braces block | |
]p | paste & indent block based on surrounding text | |
={ | (C-indenting) Auto-indent the current block (:help = for more info) | |
== | (C-indenting) Auto-indent the current line | |
gg=G | Intends everything! |
Operator & motion
List of available operators:
c change d delete y yank into register (does not change the text) ~ swap case (only if 'tildeop' is set) g~ swap case gu make lowercase gU make uppercase ! filter through an external program = filter through 'equalprg' or C-indenting if empty gq text formatting g? ROT13 encoding > shift right < shift left zf define a fold g@ call function set with the 'operatorfunc' option
List of frequently used operator motion (see :help operator). They are used like diB (delete inner {} block)
iw | inner word | aw | a word | i[ | inner [] block | a[ | a [] block | i" | inner "" string | a" | a "" string |
iW | inner WORD | aW | a WORD | ib i( | inner () block | ab a( | a () block | i' | inner '' string | a' | a '' string |
is | inner sentence | as | a sentence | i< | inner <> block | a< | a <> block | i` | inner `` string | a` | a `` string |
ip | inner paragraph | ap | a paragraph | it | inner tag block | at | a tag block | ||||
iB i{ | inner {} block | aB a{ | a {} block |
Commands
Shortcut | Description | Custom |
---|---|---|
:s/search/replace/ | Search & replace - current line | |
:%s/search/replace/ | Search & replace - global scope |
Miscellaneous Tips and Tricks
- Inserting only a single character (http://vim.wikia.com/wiki/Insert_a_single_character).
- Macro
- qq to start recording a macro q. End macro with q again.
- @q to replay macro, followed by . to replay it again.
- Visual Block
- Ctrl-v to start VISUAL BLOCK mode.
- Shift-I to insert some text at the start of each line of selected block.
- wrap-around
- Set option whichwrap or ww that allows specified keys that move the cursor left/right to move to the previous/next line when the cursor is on the first/last character in the line.
- In Vim, <space> and <backspace> are set to wrap-around by default.
- Read-only viewer (with syntax highlighting):
$ vi -R sensitive_file
$ view sensitive_file
- Retab
- To convert tabs in current file to current tab settings, use command
:retab
[8]. For instance to convert tabs into space
:set expandtab :retab
To Do
Find a way to prevent vim to mess up with my current register when deleting text.
See for instance [9].
vnoremap y "xy nnoremap d "xd vnoremap d "xd nnoremap c "xc vnoremap c "xc vnoremap p "xp nnoremap <C-p> :<C-u>set opfunc=OverridePaste<CR>g@ nnoremap <C-p><C-p> :<C-u>set opfunc=OverridePaste<CR>g@g@ function! OverridePaste(type, ...) if a:0 silent execute "normal! `<" . a:type . "`>\"xp" elseif a:type == 'line' silent execute "normal! '[V']\"xp" elseif a:type == 'block' silent execute "normal! `[\<C-V>`]\"xp" else silent execute "normal! `[v`]\"xp" endif endfunction