VIM Note
vim 小技巧
- vim ctags 自动更新
noremap <F6> <ESC>:!ctags -R *<CR>:set tags=./tags,./TAGS,tags,TAG<CR>
- vim cscope 自动更新
noremap <F6> <ESC>:!cscope -Rbq *<CR><CR>:cs add cscope.out
- vim 统计当前选择文本字数
1. 选择需要统计的文本
2. 先后按下键盘下的按键 g -> ctrl + g - vimrc 中 *map 的区别:
首先需要注意的是 vim 有三种工作模式: visual, insert, normal; 然后 map 分为两种:map(递归映射),noremap(非递归映射,not recursive map); 解释一下这里映射的概念: 如果存在映射: A -> B and B -> C 如果是递归映射:则在执行 A 的时候最终会执行到 C 代表的命令。 如果是非递归的: 执行 A 时只会执行到 B。 然后是作用域的说明: n normal v visual + option s option(在可是模式下 C^ + G 进入) x 可视 o 操作符等 ! 插入和命令行 i 插入 I 插入,命令行和 Lang-Arg c 命令行 功能域说明: 递归映射 nore 映射 un 取消映射 clear 取消所有 然后就有: nmap, xmap, smap, noremap, nnoremap, nunmap ... 具体参考 :help map
- tab
VIM 7.0 开始支持标签页打开方式
:tabnew [cmd] [file_path] // 打开一个标签页 :tabc // 关闭当前标签页 :tabo // 关闭其他标签页 :tabs // 显示所有标签叶打开的文件 :tabp [n] or gT // 切换到前一标签页 :tabn [n] or gn // 切换到后一标签页 :tabfirst // 切换到第一个标签签页 :tablast // 切换到最后一个标签页 :tab split // 在新的标签页中打开当前缓冲区文件 :tabf // 搜索当前目录中的文件并打开,如 :tabf img.* :tabm [n] // 移动到第 n 个标签页处 :set showtabline=[1,2,3] // 0 完全不显示标签栏;1 只有用户新建时才显示;2 总是现实标签栏 :tabdo [cmd] // 执行命令,将作用到标签叶中,比如: :tabdo %s/food/drink/g 将替换多个标签文件中的 food 为 drink
- 批量操作
:%s/pattern/replace/gc // % 标定范围,也可以用具体多少行到多少行表示,比如当前替换规则适用于 10 到 20 行,则可以这样写 10,20 // pattern 正则表达式 // replace 需要替换的字符串,可以用 & 表示之前匹配到的目标串 :%g/pattern/d // 删除匹配到的行 :%g!/pattern/d // 删除除匹配行的所有行 :%v/pattern/d // 删除除匹配行的所有行
- 设置状态栏现实文件完整路径
在状态栏中,添加%F以显示完整路径,如set statusline+=%F
, 如果你的状态栏还是没有变化,那么你还需要加上set laststatus=2
也可以执行Ctr g
查看 - vim 语法
查询 vim 中与 theme 相关的配置以及 vim 配置中的语法可在 vim 中运行
:help syntax.txt
- VIM 折叠相关快捷操作
vim 折叠有下面这几种类型value 解释 manual 手工定义折叠 indent 更多的缩进表示更高级别的折叠 expr 用表达式来定义折叠 syntax 用语法高亮来定义折叠 diff 对没有更改的文本进行折叠 marker 对文中的标志折叠
你可以使用下面的这些方法启用折叠:set foldenable
or:set foldmethod=manual
or:set foldmethod=marker
当你使用indent
的时候,可以通过foldlevel=1
来修改缩进的级别。python 一般默认支持。
快捷键 功能 z --> c 折叠 z --> shift+c 折叠当前区域所有层级(包括父层级) z --> o 展开当前层级 z --> shift+o 展开当前区域所有层级(包括父层级) [ --> z 到当前打开的折叠的开始处 ] --> z 到当前打开的折叠的末尾处 z --> j 向下移动。到达下一个折叠的开始处。关闭的折叠也被计入 z --> k 向上移动到前一折叠的结束处。关闭的折叠也被计入 z --> r 展开一级所有的折叠 z --> shift+r 展开所有的折叠 z --> m 对所有的代码进行一级折叠 z --> shift+m 对所有的代码进行折叠 z --> n 禁用折叠 z --> shift+n 启用折叠 z --> d 删除当前位置折叠代码 ( 仅当 'foldmethod' 设为 manual 或 marker 时有效 ) z --> shift+d 嵌套删除折叠 ( 仅当 'foldmethod' 设为 manual 或 marker 时有效 ) z --> shift+e 删除所有折叠代码 ( 仅当 'foldmethod' 设为 manual 或 marker 时有效 ) z --> f 创建折叠, 比如: zf56G
,10zf / 10zf+ / zf10↓
,10zf- / zf10↑
,zf%
( 仅当 'foldmethod' 设为 manual / marker 时有效 ) - 我的 VIM 配置
syntax on set number" set ruler set incsearch set hlsearch set hls set ignorecase set smartcase set showmode set list set listchars=tab:>.,trail:. set shiftwidth=4 set tabstop=4 set expandtab set nobackup set splitbelow set splitright set autoindent set foldmethod=indent set laststatus=2 set colorcolumn=81 color desert set cursorline set cursorcolumn hi CursorLine term=bold cterm=bold ctermbg=Black guibg=Grey40 hi CursorColumn ctermbg=None ctermfg=White hi CursorColumn term=bold cterm=bold ctermbg=None ctermfg=White hi Search term=bold cterm=bold ctermfg=yellow ctermbg=black hi ColorColumn ctermbg=DarkGrey set history=1000 set wildmenu set wildmode=list:longest set wildignore=*.docx,*.jpg,*.png,*.gif,*.pdf,*.pyc,*.exe,*.flv,*.img,*.xlsx set nocompatible filetype on filetype plugin on filetype indent on set cursorline set mouse=r function CreateTags() exec ':!ctags -R -f ./tags' endfunction nmap :call CreateTags()
- spaceVim 的常用功能 ( 可能我研究不深, 我觉得 spaceVim 并没有原生的香,现已弃用 )
:SPUpdate SpaceVim
打开 SpaceVim 的插件管理器,更新 SpaceVim:h SpaceVim-options
查看 spaceVim 的所有配置~/.SpaceVim.d/init.toml
用户的 SpaceVim 的配置目录SPC t
进入 SpaceVim 的控制面板SPC t t
打开标签管理器SPC f t
或者F3
打开文件树SPC v d
打开当前配置F2
打开关闭语法树- 修改
~/.SpaceVim/autoload/SpaceVim.vim
文件中g:spacevim_lint_on_save
参数为 0, 可禁止 SpaceVim 在编写代码时候弹出语法检查看板
- 我的 spaceVim 的配置
..[$] <()> cat ~/.SpaceVim.d/init.toml [options] colorscheme = "gruvbox" colorscheme_bg = "dark" enable_guicolors = false statusline_separator = "nil" statusline_iseparator = "bar" buffer_index_type = 4 windows_index_type = 3 enable_tabline_filetype_icon = false enable_statusline_mode = false statusline_unicode_symbols = false vimcompatible = true default_indent = 4 expand_tab = true autocomplete_method = "deoplete" snippet_engine = "ultisnips" # Enable autocomplete layer [[layers]] name = 'autocomplete' auto_completion_return_key_behavior = "nil" auto_completion_tab_key_behavior = "smart" auto_completion_delay = 200 auto_completion_complete_with_key_sequence = "nil" auto_completion_complete_with_key_sequence_delay = 0.1 [[layers]] name = 'shell' default_position = 'top' default_height = 30 [[layers]] name = "lang#c" enable_clang_syntax_highlight = true [layer.clang_std] c = "c11" cpp = "c++1z" objc = "c11" objcpp = "c++1z" [[layers]] name = "lsp" filetypes = [ "c", "cpp" ] [layers.override_cmd] c = ["clangd", "--limit-results=5"] cpp = ["clangd", "--limit-results=5"]
原创文章,版权所有,转载请获得作者本人允许并注明出处
我是留白;我是留白;我是留白;(重要的事情说三遍)