vim cheatsheet

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  :call Compile()

use it with Ctrl + j in normal mode

6.3 map shortcut =j

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

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 f )a 以后就可以按 Ctrl + l 直接在 INSERT 模式下跳到下一个 ) 后面继续输入

扩展阅读

  • 智能补全:http://www.voidcn.com/article/p-wmjmglkp-tp.html
  • vim 命令模式转换: https://www.zhihu.com/question/20013329

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 在 Paste 模式中切换,当然快捷键在不冲突的前提下可以任意指定

设置

set pastetoggle=
set paste

保证不自动换行和补全。

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

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

高级设置 F2 切换快捷键

if $TMUX == ''
    set clipboard+=unnamed
endif
nnoremap  :set invpaste paste?
imap  :set invpaste paste?
set pastetoggle=

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)