美文网首页
vim cheatsheet

vim cheatsheet

作者: cityhash123 | 来源:发表于2019-07-11 12:14 被阅读0次

    1. 变量自动提示,快速选择(不使用上下键)

    Insert Model both bring out the pop-up menu, With the difference being

    Ctrl + n    // 向下 goes to next word from top to bottom in that word suggestions list, where as Ctrl-P goes in opposite manner.
    Ctrl + p    // 向上 goes to top
    

    Normal Model

    Ctrl + o  // Jumping to previously visited locations
    Ctrl + i  // `Tab` 功能相同 Jumping to last visited locations, same to Tab, reverse of Ctrl + o, 多个文件跳转
    

    2. 显示不可见字符

    cat -A file 可以把文件中的所有可见的和不可见的字符都显示出来。

    `^I` 表示一个tab符
    `$` 表示一个回车符
    

    在 Vim 中,可以 :%!cat -A 在Vim中调用cat转换显示,这样的做法不便于编辑。
    Vim本身可设置显示不可见字符 :set invlist 即可以将不可见的字符显示

    :set invlist    // 将不可见的字符显示出来,例如,会以^I表示一个tab符,$表示一个回车符
    :set nolist     // 回到正常的模式
    

    3. 分屏

    :vsplit // 命令太长,没人用
    :vsp   // 常用
    :sp filename
    

    分屏的相关动作都是 ctrl+w 开始,再跟一个其他字母

    ctrl+w = :让左右上下各个分屏宽度,高度均等
    ctrl+w _(shift + -) :当前屏幕高度扩展到最大
    ctrl+w |(shift + \) :当前屏幕宽度扩展到最大
    ctrl+w c:关闭当前屏幕
    

    4. 常见的 .vimrc 配置

    将tab键替换为 4 个空格, python 开发尤为重要

    set tabstop=4       " Tab键替换的空格长度,默认8
    set softtabstop=4   " 退格键退回缩进空格的长度
    set shiftwidth=4    " 表示每一级缩进的长度
    set expandtab       " 设置缩进用空格来表示
    set autoindent      " 设置自动缩进
    
    set noswapfile    " 不生成临时文件
    

    5. 自动补全

    行自动补全

    Ctrl + x Ctrl + l (l指小写的L ):两个命令组合使用。在插入模式下输入已经存在行的第一个单词,再按这两个键,就会列出该整行出来

    文件名自动补全:

    Ctrl + x Ctrl + f :插入模式下,按这两个组合键,可以插入当前目录下的文件名。

    函数自动补全

    安装 phpcomplete 插件, 如果是 vim7.0 以上,不需要下载 phpcomplete.vim 插件,因为 vim 安装时自带了。

    /usr/share/vim/vim74/autoload/phpcomplete.vim

    配置

    在 ~/.vimrc 中添加

    filetype plugin on                                             
    autocmd FileType php set omnifunc=phpcomplete#CompletePHP
    

    python 自动补全

    filetype plugin on  
    autocmd FileType python set omnifunc=pythoncomplete#Complete
    

    注意 python3 需要重新编译 vim

    https://zhongwei-leg.iteye.com/blog/941474

    使用

    vim 打开 php 文件, 插入一段代码如:str

    1. 在编辑模式下,Ctrl+x 进入 ^X 模式
    2. Ctrl+o 出现对应的 function 列表提示框,页面顶部显示函数定义,如图:
    vim.png
    1. Ctrl+n, Ctrl+p 上下选择,ESC 取消提示

    6. Format JSON

    :%!python -m json.tool
    

    6.1 define custom function and use it

    1. define function in .vimrc

      function! FormatJSON()
      :%!python -m json.tool
      endfunction

    2. use it in visual mode

      :call FormatJSON()

    6.2 map shortcut Ctrl + j

    define command in .vimrc

    nnoremap <C-j> :call Compile()<CR>
    

    use it with Ctrl + j in normal mode

    6.3 map shortcut =j

    nmap =j :%!python -m json.tool<CR>
    

    use it with =j in normal mode

    7. 冷知识

    `Ctrl + [` 与 `Esc` 键的功能相同,都可以进入 `命令模式`
    `Ctrl + o` 命令模式下执行一条命令,就返回 Insert 模式
    Ctrl + o + a    // 补全分号
    `v + i + (`,选中所有括号里面的内容
    

    8. 代码自动补全 继续输入

    1. 继续输入补全的分号,括号。 比如当 cursor 在 ) 位置时,继续输入 ) ,会跳过 ) ,而不会多加一个 )

    2. Esc + $ + a 再输入 分号 结束

    3. Esc + A 再输入 分号 结束

    4. Esc + f + ) + a ,就可以在括号后面插入

    5. 自定义快捷键

      inoremap <C-L> <esc>f )a 以后就可以按 Ctrl + l 直接在 INSERT 模式下跳到下一个 ) 后面继续输入

    扩展阅读

    9. visual 模式

    v                    VISUAL
    Shift              VISUAL LINE
    Ctrl + v          VISUAL BLOCK
    

    10. xshell 右键不能复制选中文本

    按住 shift 键,再用鼠标选择。
    

    11. help

    查看帮助文档

    :help ctrl-o

    12. 粘贴后自动补全致格式错乱

    背景:在终端Vim中粘贴代码时,发现插入的代码会有多余的缩进,而且会逐行累加。原因是终端把粘贴的文本存入键盘缓存(Keyboard Buffer)中,Vim则把这些内容作为用户的键盘输入来处理。导致在遇到换行符的时候,如果Vim开启了自动缩进,就会默认的把上一行缩进插入到下一行的开头,最终使代码变乱。

    解决

    取消自动缩进

    在命令模式下,使用:set nosmartindent:set noautoindent取消自动缩进,然后再粘贴即可。完成后再开启自动缩进:set smartindent:set autoindent,以上命令都可使用简写,比如:set si,可通过Vim的帮助:help smartindent查看相应说明。

    Paste模式

    Vim的编辑模式中,还有一个Paste模式,在该模式下,可将文本原本的粘贴到Vim中,以避免一些格式错误。通过:set paste:set nopaste进入和退出该模式。更简便的方式是,在Vim中设置一个进入和退出Paste模式的快捷键,往~/.vimrc中添加一行配置set pastetoggle=<F12>,这样即可通过 F12 在 Paste 模式中切换,当然快捷键在不冲突的前提下可以任意指定

    设置

    set pastetoggle=
    set paste
    

    保证不自动换行和补全。

    原因:终端的vim中没有相应的程序来处理这个从其他应用复制粘贴的过程,所以Vim通过插入键盘输入的buffer来模拟这个粘贴的过程,这个时候Vim会以为这是用户输入的。

    问题出在:当上一行结束,光标进入下一行时Vim会自动以上一行的的缩进为初始位置。这样就会破坏原始文件的缩进。

    高级设置 F2 切换快捷键

    if $TMUX == ''
        set clipboard+=unnamed
    endif
    nnoremap <F2> :set invpaste paste?<CR>
    imap <F2> <C-O>:set invpaste paste?<CR>
    set pastetoggle=<F2>
    

    13. windows ssh mac vim乱码

    方法1:在 ~/.bash_profile 文件中添加

    export LANG="zh_CN.UTF-8"
    export LC_ALL="zh_CN.UTF-8"
    

    方法2:在 ~/.vimrc 中添加

    set encoding=utf8
    

    14. vundle 插件管理

    默认安装在/.vim/bundle/vundle下

    git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim
    

    相关文章

      网友评论

          本文标题:vim cheatsheet

          本文链接:https://www.haomeiwen.com/subject/lcvrkctx.html