VIM Note

vim 小技巧
  1. vim ctags 自动更新
    noremap <F6> <ESC>:!ctags -R *<CR>:set tags=./tags,./TAGS,tags,TAG<CR>
  2. vim cscope 自动更新
    noremap <F6> <ESC>:!cscope -Rbq *<CR><CR>:cs add cscope.out
  3. vim 统计当前选择文本字数
    1. 选择需要统计的文本
    2. 先后按下键盘下的按键 g -> ctrl + g
  4. 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
        
  5. 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
        
  6. 批量操作
    :%s/pattern/replace/gc      // % 标定范围,也可以用具体多少行到多少行表示,比如当前替换规则适用于 10 到 20 行,则可以这样写 10,20
                            // pattern 正则表达式
                            // replace 需要替换的字符串,可以用 & 表示之前匹配到的目标串
    :%g/pattern/d               // 删除匹配到的行
    :%g!/pattern/d              // 删除除匹配行的所有行
    :%v/pattern/d               // 删除除匹配行的所有行
        
  7. 设置状态栏现实文件完整路径
    在状态栏中,添加%F以显示完整路径,如 set statusline+=%F, 如果你的状态栏还是没有变化,那么你还需要加上 set laststatus=2
    也可以执行 Ctr g 查看
  8. vim 语法 查询 vim 中与 theme 相关的配置以及 vim 配置中的语法可在 vim 中运行 :help syntax.txt
  9. 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 创建折叠, 比如: zf56G10zf / 10zf+ / zf10↓10zf- / zf10↑, zf%
    ( 仅当 'foldmethod' 设为 manual / marker 时有效 )
  10. 我的 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()  
        
  11. spaceVim 的常用功能 ( 可能我研究不深, 我觉得 spaceVim 并没有原生的香,现已弃用 )
    1. :SPUpdate SpaceVim 打开 SpaceVim 的插件管理器,更新 SpaceVim
    2. :h SpaceVim-options 查看 spaceVim 的所有配置
    3. ~/.SpaceVim.d/init.toml 用户的 SpaceVim 的配置目录
    4. SPC t 进入 SpaceVim 的控制面板
    5. SPC t t 打开标签管理器
    6. SPC f t 或者 F3 打开文件树
    7. SPC v d 打开当前配置
    8. F2 打开关闭语法树
    9. 修改 ~/.SpaceVim/autoload/SpaceVim.vim 文件中 g:spacevim_lint_on_save 参数为 0, 可禁止 SpaceVim 在编写代码时候弹出语法检查看板
  12. 我的 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"]
        
原创文章,版权所有,转载请获得作者本人允许并注明出处
我是留白;我是留白;我是留白;(重要的事情说三遍)
posted @ 2022-08-08 23:10  Mojies  阅读(74)  评论(0编辑  收藏  举报