Vim
来源:互联网 发布:数据库事务特性 编辑:程序博客网 时间:2024/06/05 10:47
vim入门教程命令 : vimtutor
Vim的模式
- 正常模式(
Esc
) 左下角显示文件名或为空 - 插入模式(
i/I/a/A/o/O/r/R
) 左下角显示–INSERT–(所有输入将保存到当前文本) - 块选择(
V/v
) 左下角显示–VISUAL–(选中模式,方向键选择后操作)
正常模式
Ctrl+b
屏幕向上移动一页,相当于Page Up
Ctrl+d
屏幕向下移动半页 Ctrl+f
屏幕向下移动一页,相当于Page Down
Ctrl+r
重做上一个操作 Ctrl+u
屏幕向上移动半页 Ctrl+v
块选择,可以用矩形的方式选择数据
D
删除所选字符即右边字符 d
删除当前行和上一行 d1G
删除从光标所在行到第一行的所有数据 dd
删除光标所在的那一行 dG
删除从光标所在到最后一行的所有数据 d$
删除从光标所在字符到该行的最后一个字符
G
移动到这个文件的最后一行 gg
移动到这个文件的第一行,相当于1G
H
光标移动到这个屏幕的最上方那一行的第一个字符 h/←
光标向左移动一个字符
I
进入插入模式 i
进入插入模式
j/↓
光标向下移动一个字符
k/↑
光标向上移动一个字符
l/→
光标想右移动一个字符
P
将已复制的数据在光标的上一行黏贴 p
将已复制的数据在光标的下一行黏贴
u
复原前一个操作
V
块选择,选中当前行 v
块选择,选中当前字符
X
向前删除一个字符,相当于Backspace
x
向后删除一个字符,相当于Delete
yy
复制当前行
ZZ
保存后离开
:N
编辑上一个文件 :n
编辑下一个文件 :n1, n2 w [filename]
将n1到n2的内容保存成[filename]这个文件 :q
离开 :q!
强制离开 :r [filename]
在光标所在行后面读入[filename]文件数据 :w
将编辑的数据写入硬盘文件中 :w [filename]
另存为[filename] :wq
修改后保存退出 :! command
暂时离开vi到命令行模式下执行command的显示结果
/word
向下查找名称为word的字符串
?word
向上查找名称为word的字符串
_vimrc
```set encoding=utf-8set termencoding=utf-8set fileencodings=utf-8,chinese,latin-1if has("win32") set fileencoding=chineseelse set fileencoding=utf-8endiflanguage messages zh_CN.utf-8" 设定不与以前版本兼set nocompatible" 设置配色方案,在 colors 文件夹下colorscheme slate" 显示行号set nu" 侦测文件类型filetype on" 设置当文件被改动时自动载入set autoread" 记录历史的行数set history=100" 显示语法高亮syntax enablesyntax on" 在处理未保存或只读文件的时候,弹出确认set confirm" 与windows共享剪贴板set clipboard+=unnamed" 载入文件类型插件filetype plugin on" 为特定文件类型载入相关缩进文件filetype indent on" 保存全局变量set viminfo+=!" 带有如下符号的单词不要被换行分割set iskeyword+=_,$,@,%,#,-" 设置鼠标一直可用set mouse=a" 高亮当前行set cursorline" 命令行高度set cmdheight=1" 启动的时候不显示那个援助索马里儿童的提示set shortmess=atI " 不让vim发出讨厌的滴滴声set noerrorbells" 在被分割的窗口间显示空白,便于阅读set fillchars=vert:\ ,stl:\ ,stlnc:\""""""""""""""""""""""""""""" 文件设置""""""""""""""""""""""""""""" 不要备份文件(覆盖文件时不备份)set nobackup" 不要生成swap文件,当buffer被丢弃的时候隐藏它setlocal noswapfileset bufhidden=hide" 字符间插入的像素行数目set linespace=0" 增强模式中的命令行自动完成操作set wildmenu" 置粘贴模式,使得粘贴不错位" set paste" 保存文件,用习惯了Ctrl+S了" nmap <C-s> <esc>:w<CR>" imap <C-s> <esc>:w<CR>noremap <C-S> :update<CR>vnoremap <C-S> <C-C>:update<CR>inoremap <C-S> <C-O>:update<CR>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 搜索和匹配"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 高亮显示匹配的括号set showmatch" 高亮显示被找到的句子(phrases)"set hlsearch" 在搜索时,输入的词句的逐字符高亮(类似firefox的搜索),即输入搜索内容时就显示搜索结果set incsearch" 搜索时忽略大小写set ignorecase" 不要闪烁set novisualbell"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 文本格式和排版"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 自动格式化set formatoptions=tcrqn" 继承前一行的缩进方式,特别适用于多行注释set autoindent" 为C程序提供自动缩进set smartindent" 使用C样式的缩进set cindent" 制表符为4set tabstop=4" 统一缩进为4" 使得按退格键时可以一次删掉 4 个空格set softtabstop=4" 设定 << 和 >> 命令移动时的宽度为 4set shiftwidth=4" 不要用空格代替制表符set noexpandtab" 设置每行81个字符自动换行set textwidth=81" 自动切换当前目录为当前文件所在的目录set autochdir" 折叠代码set foldmethod=syntax" 文件打开时不折叠set foldlevel=100""""""""""""""""""""""""""""""""""""""""""""自动实例括号"""""""""""""""""""""""""""""""""""""""""""inoremap ( ()<ESC>iinoremap ) <c-r>=ClosePair(')')<CR>inoremap { {<CR><Tab><CR>}<ESC>k$a<Backspace>inoremap } <c-r>=ClosePair('}')<CR>inoremap [ []<ESC>iinoremap ] <c-r>=ClosePair(']')<CR>inoremap ' ''<ESC>iinoremap " ""<ESC>ifunction ClosePair(char) if getline('.')[col('.') - 1] == a:char return "\<Right>" else return a:char endifendf"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" set mapleader"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""let mapleader = ","" platformfunction! MySys() if has("win32") return "windows" else return "linux" endifendfunction" if file not opened, create a new tab, or switch to the opened filefunction! SwitchToBuf(filename) " find in current tab let bufwinnr = bufwinnr(a:filename) if bufwinnr != -1 exec bufwinnr . "wincmd w" return else " search each tab tabfirst let tb = 1 while tb <= tabpagenr("$") let bufwinnr = bufwinnr(a:filename) if bufwinnr != -1 exec "normal " . tb . "gt" exec bufwinnr . "wincmd w" return endif tabnext let tb = tb +1 endwhile " not exist, new tab exec "tabnew " . a:filename endifendfunction" fast edit .vimrcif MySys() == 'linux' " fast reloading of the .vimrc map <silent> <leader>ss :source ~/.vimrc<cr> " fast editing of the .vimrc map <silent> <leader>ee :call SwitchToBuf("~/.vimrc")<cr> " when .vimrc is edited, reload it autocmd! bufwritepost .vimrc source ~/.vimrcelseif MySys() == 'windows' " Set helplang set helplang=cn "Fast reloading of the _vimrc map <silent> <leader>ss :source ~/_vimrc<cr> "Fast editing of _vimrc map <silent> <leader>ee :call SwitchToBuf("~/_vimrc")<cr> "When _vimrc is edited, reload it autocmd! bufwritepost _vimrc source ~/_vimrcendifif MySys() == 'windows' source $VIMRUNTIME/mswin.vim behave mswinendif"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 插件""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""加入工程使得能够访问ctags"""""""""""""""""""""""""""""""project1"set tags=tagsset autochdir"后面的工程加在tags变量上""""""""""""""""""""""""""""""" 设置Taglist""""""""""""""""""""""""""""""" 按照名称排序let Tlist_Sort_Type = "name"" 在右侧显示窗口let Tlist_Use_left_Window = 1" 如果只有一个buffer,kill窗口也kill掉bufferlet Tlist_Exist_OnlyWindow = 1" 使taglist只显示当前文件tag,其它文件的tag都被折叠起来(同时显示多个文件中的tag时)let Tlist_File_Fold_Auto_Close = 1" 不要显示折叠树let Tlist_Enable_Fold_Column = 1"不同时显示多个文件的tag,只显示当前文件的let Tlist_Show_One_File = 1 " 键盘映射nmap tl :TlistToggle<cr>""""""""""""""""""""""""""""""""""""""""""""""设置 winManager winManager管理netrw和Taglist。"""""""""""""""""""""""""""""""""""""""""""""let g:winManagerWindowLayout = "FileExplorer|TagList"let g:persistentBehaviour = 0let g:winManagerWidth = 30let g:defaultExplorer = 0nmap <C-W><C-F> :FirstExplorerWindow<cr>nmap <C-W><C-B> :BottomExplorerWindow<cr>"nmap <silent> <F8> :WMToggle<cr>nmap wm :WMToggle<cr>"设置 netrw"""""""""""""""""""""""""""""""let g:netrw_winsize = 30"nmap <silent> <leader>fe :Sexplore!<cr>"let Tlist_File_Fold_Auto_Close=1" 快速切换头文件/源文件"nnoremap <silent><F12>:A<cr>""nmap <silent><F12>:A<CR>"在工程中快速查找"nnoremap <silent><F3>:Grep<cr>"""""""""""""""""""""""""""""""设置 MiniBufExploer""""""""""""""""""""""""""""""" quickfix模式autocmd FileType c,cpp map <buffer> <leader><space> :w<cr>:make<cr>"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""F5编译和运行C++程序"F6编译和运行C程序""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" C的编译和运行map <F6> :call CompileRunGcc()<CR>func! CompileRunGcc()exec "w"exec "!gcc % -o %<"exec "! ./%<"endfunc" C++的编译和运行map <F5> :call CompileRunGpp()<CR>func! CompileRunGpp()exec "w"exec "!g++ % -o %<"exec "! ./%<"endfuncsource $VIMRUNTIME/vimrc_example.vimsource $VIMRUNTIME/mswin.vimbehave mswinset diffexpr=MyDiff()function MyDiff() let opt = '-a --binary ' if &diffopt =~ 'icase' | let opt = opt . '-i ' | endif if &diffopt =~ 'iwhite' | let opt = opt . '-b ' | endif let arg1 = v:fname_in if arg1 =~ ' ' | let arg1 = '"' . arg1 . '"' | endif let arg2 = v:fname_new if arg2 =~ ' ' | let arg2 = '"' . arg2 . '"' | endif let arg3 = v:fname_out if arg3 =~ ' ' | let arg3 = '"' . arg3 . '"' | endif let eq = '' if $VIMRUNTIME =~ ' ' if &sh =~ '\<cmd' let cmd = '""' . $VIMRUNTIME . '\diff"' let eq = '"' else let cmd = substitute($VIMRUNTIME, ' ', '" ', '') . '\diff"' endif else let cmd = $VIMRUNTIME . '\diff' endif silent execute '!' . cmd . ' ' . opt . arg1 . ' ' . arg2 . ' > ' . arg3 . eqendfunction" 自动补全(ctrl-p)时的一些选项: 多于一项时显示菜单,最长选择; 显示当前选择的额外信息if v:version >= 700 set completeopt=menu,longest,preview endif"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 状态行相关动作"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" 显示状态栏 (默认值为 1, 无法显示状态栏)set laststatus=2" 状态行颜色highlight StatusLine guifg=SlateBlue guibg=Yellowhighlight StatusLineNC guifg=Gray guibg=Whitefunction! CurDir() let curdir = substitute(getcwd(), '/Users/amir/', "~/", "g")return curdirendfunction""""""""""""""""""""""""""""""""状态行显示内容"""""""""""""""""""""""""""""""" %F 当前文件名" %m 当前文件修改状态" %r 当前文件是否只读" %Y 当前文件类型" %{&fileformat} 当前文件编码" %b 当前光标处字符的 ASCII 码值" %B 当前光标处字符的十六进制值" %l 当前光标行号" %c 当前光标列号" %V 当前光标虚拟列号 (根据字符所占字节数计算)" %p 当前行占总行数的百分比" %% 百分号" %L 当前文件总行数 set statusline=\ %F%m%r%h\ %w\ \ CWD:\ %r%{CurDir()}%h\ \ \ Line:\ %l/%L:%c " 设置在状态行显示的信息如下: "set nowrapscan"Highlight currentif has("gui_running") set cursorline hi cursorline guibg=#333333 hi CursorColumn guibg=#333333endif"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" => VIM userinterface""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""Set 7 lines to the curors - when moving vertical..set so=7"Do not redraw, when running macros.. lazyredrawset lz"Change buffer - without savingset hid"Set magic onset magic"How many tenths of a second to blinkset mat=2" 设置窗口大小""set lines=40"set columns=100""""""""""""""""""""""""""""""""""""""""""""""""""""菜单栏、工具栏显示与隐藏的切换"""""""""""""""""""""""""""""""""""""""""""""""""""set guioptions-=Tset guioptions-=mmap <silent> <F4> :if &guioptions =~# 'T' <Bar> \set guioptions-=T <Bar> \set guioptions-=m <bar> \else <Bar> \set guioptions+=T <Bar> \set guioptions+=m <Bar> \endif<CR>""""""""""""""""""""""""""""""""""""""""""""""""""""" 日历插件设置""""""""""""""""""""""""""""""""""""""""""""""""""""" let g:calendar_diary = /calendar" map ca :Calendar<cr>" 让 gvim 支持 Alt+n 来切换标签页function! BufPos_ActivateBuffer(num) let l:count = 1 for i in range(1, bufnr("$")) if buflisted(i) && getbufvar(i, "&modifiable") if l:count == a:num exe "buffer " . i return endif let l:count = l:count + 1 endif endfor echo "No buffer!"endfunctionfunction! BufPos_Initialize() for i in range(1, 9) exe "map <M-" . i . "> :call BufPos_ActivateBuffer(" . i . ")<CR>" endfor exe "map <M-0> :call BufPos_ActivateBuffer(10)<CR>"endfunctionautocmd VimEnter * call BufPos_Initialize()" 按F11键让VIM全屏if has('gui_running') && has("win32") map <F11> <Esc>:call libcallnr("gvimfullscreen.dll", "ToggleFullScreen", 0)<CR>endif" 自动载入_vimrcautocmd! bufwritepost _vimrc source %
- vim
- VIM-
- vim
- vim
- vim
- vim
- vim
- vim
- vim
- VIM
- vim !!!
- VIM
- VIM
- vim
- vim
- Vim
- Vim
- vim
- 修改Mac下Safari设置无副作用轻松上Google
- 打出菱形图案
- UVA 10340 All in All(水题)
- 深入理解calcBackProject
- 学习网页设计,你必须要去学习的知识点!
- Vim
- 10.03
- 设计模式(一)
- 框架入门 中级篇 (中)twig模板引擎
- 51nod 1183 编辑距离
- leetcode-013-Roman to Integer
- 长恨歌(白居易)
- 下班后的1小时, 会影响到你的工作和生活
- CUDA学习--内存处理之全局内存(5)