语法:gvim
差别
这里会显示出您选择的修订版和当前版本之间的差别。
两侧同时换到之前的修订记录前一修订版后一修订版 | 前一修订版 | ||
语法:gvim [2024/01/13 10:52] – 移除 - 外部编辑 (Unknown date) 127.0.0.1 | 语法:gvim [2024/07/03 08:09] (当前版本) – [2.1 tab转空格] user01 | ||
---|---|---|---|
行 1: | 行 1: | ||
+ | ====== gvim ====== | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== - windows gvim ===== | ||
+ | |||
+ | |||
+ | ==== - _vimrc ==== | ||
+ | <code vim> | ||
+ | set nocompatible | ||
+ | source $VIMRUNTIME/ | ||
+ | " | ||
+ | " | ||
+ | set encoding=utf-8 | ||
+ | |||
+ | set tabstop=4 | ||
+ | set shiftwidth=4 | ||
+ | set expandtab | ||
+ | set autoindent | ||
+ | |||
+ | </ | ||
+ | |||
+ | ==== - 菜单语言切换为英文 ==== | ||
+ | 在_vimrc文件末尾加入以下内容 | ||
+ | <code vim> | ||
+ | set langmenu=en_US | ||
+ | let $LANG= ' | ||
+ | source $VIMRUNTIME/ | ||
+ | source $VIMRUNTIME/ | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ==== - gvim支持中文显示 ==== | ||
+ | <code vim> | ||
+ | set fileencodings=utf-8, | ||
+ | " set termencoding=utf-8 | ||
+ | "set fileformats=unix | ||
+ | "set encoding=utf-8 | ||
+ | </ | ||
+ | |||
+ | ==== - 保持linux操作方式,比如支持Ctrl-V 选择 ==== | ||
+ | 注释以下行 | ||
+ | <code vim> | ||
+ | " | ||
+ | </ | ||
+ | |||
+ | ==== - tab宽度及其它 ==== | ||
+ | <code vim> | ||
+ | set expandtab | ||
+ | set shiftwidth=4 | ||
+ | set tabstop=4 | ||
+ | set noundofile | ||
+ | set cursorline | ||
+ | set cursorcolumn | ||
+ | set nobackup | ||
+ | </ | ||
+ | |||
+ | ===== - 用法技巧等 ===== | ||
+ | ==== - tab转空格 ==== | ||
+ | < | ||
+ | :retab | ||
+ | </ | ||
+ | |||
+ | ==== - 显示match匹配行数 ==== | ||
+ | <code vim> | ||
+ | :%s/xxx//gn | ||
+ | |||
+ | [g] 替换行中出现所有匹配,否则只替换第一个。 | ||
+ | [n] 意思是显示匹配数,但是不做实际的替换操作; | ||
+ | [i] 匹配时忽略大小写, | ||
+ | [I] 匹配时不忽略大小写, , set ignorecase在这不起作用 | ||
+ | </ | ||
+ | |||
+ | ==== - 输入时不自动换行 ==== | ||
+ | <code vim> | ||
+ | set textwidth=0 | ||
+ | </ | ||
+ | 默认情况下,其width值为78。设置为0就相当于关闭这个功能,设置成正值就可以让 vim 在指定长度上折行。 | ||
+ | |||
+ | ==== - gvim启动时窗口默认最大化 ==== | ||
+ | |||
+ | linux环境,在.vimrc文件中加入以下内容: | ||
+ | |||
+ | <code vim> | ||
+ | if has(" | ||
+ | " GUI is running or is about to start. | ||
+ | " Maximize gvim window (for an alternative on Windows, see simalt below). | ||
+ | set lines=999 columns=999 | ||
+ | else | ||
+ | " This is console Vim. | ||
+ | if exists(" | ||
+ | set lines=50 | ||
+ | endif | ||
+ | if exists(" | ||
+ | set columns=100 | ||
+ | endif | ||
+ | endif | ||
+ | </ | ||
+ | 以上的数值可以根据实际情况再作微调。 | ||
+ | |||
+ | 如果只是想把gvim窗口设置到合适大小,可以根据情况自行调整lines和columns的大小。 | ||
+ | |||
+ | windows环境,在_vimrc文件中加入以下内容: | ||
+ | <code vim> | ||
+ | autocmd GUIEnter * simalt ~x | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== - gvim窗口初始位置 ==== | ||
+ | 有时候可能会有调整gvim窗口刚打开时的窗口初始位置,比如固定为左上角,右上角,居中等等,可以通过下面的方式去设置它的初始窗口位置。 | ||
+ | <code vim> | ||
+ | # 在.vimrc文件写入如下语句,将gvim窗口放在指定位置, | ||
+ | :winpos x y | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== - vim打开文件时回到上次浏览位置 ==== | ||
+ | |||
+ | <code vim> | ||
+ | " | ||
+ | " | ||
+ | if has(" | ||
+ | " | ||
+ | | ||
+ | \ if line("' | ||
+ | \ exe " | ||
+ | \ endif | ||
+ | endif | ||
+ | </ | ||
+ | |||
+ | |||
+ | 以下是来自于gvim help '" | ||
+ | This autocommand jumps to the last known position in a file just after opening it, if the '" | ||
+ | <code vim> | ||
+ | au BufReadPost * if line("' | ||
+ | </ | ||
+ | ==== - 显示当前文件的完整路径 ==== | ||
+ | 先按下数字键1, 然后再按Ctrl + G | ||
+ | < | ||
+ | CTRL-G | ||
+ | |||
+ | {count}CTRL-G | ||
+ | If the count is higher than 1 the current buffer number is also given. | ||
+ | </ | ||
+ | ==== - vimdiff 忽略空格 ==== | ||
+ | |||
+ | https:// | ||
+ | |||
+ | 只需在vimrc文件中加入以下: | ||
+ | <code vim> | ||
+ | set diffopt+=iwhite | ||
+ | </ | ||
+ | 或者 | ||
+ | <code vim> | ||
+ | if &diff | ||
+ | set diffopt+=iwhite | ||
+ | endif | ||
+ | </ | ||
+ | |||
+ | 或者 | ||
+ | <code vim> | ||
+ | if &diff | ||
+ | map gs :call IwhiteToggle()< | ||
+ | function! IwhiteToggle() | ||
+ | if & | ||
+ | set diffopt-=iwhite | ||
+ | else | ||
+ | set diffopt+=iwhite | ||
+ | endif | ||
+ | endfunction | ||
+ | endif | ||
+ | </ | ||
+ | |||
+ | 或者以下面的命令方式启动比较: | ||
+ | <code bash> | ||
+ | vimdiff -c 'set diffopt+=iwhite' | ||
+ | </ | ||
+ | |||
+ | |||
+ | |||
+ | ==== - 批处理命令执行 ==== | ||
+ | 比如以下的命令 | ||
+ | <code vim> | ||
+ | : | ||
+ | : | ||
+ | </ | ||
+ | |||
+ | 假设是期望依次执行上述语句,可以将其保存到一个临时文件,比如abc.vim, 然后在vim窗口中执行'': | ||
+ | |||
+ | |||
+ | ==== - 在每行内容前插入行号 ==== | ||
+ | |||
+ | :set number 命令可以在 vim 中显示行号,但是如何让 vim 在真正的文件中添加行号呢? 比如说当你要打印代码的时候,或者将代码粘贴到网上的时候,在代码中添加行号会更利于浏览,废话说了这么多,其实只要一行命令就可以搞定。 | ||
+ | |||
+ | <code vim> | ||
+ | " ===== 正向顺序 | ||
+ | :g/^/exe ": | ||
+ | |||
+ | " ====== 反向顺序, | ||
+ | :g/^/exe ": | ||
+ | |||
+ | |||
+ | |||
+ | " ===== 也可以加入printf, 修改行号占用的宽度,比如占用4位宽,这样显得比较对齐。 | ||
+ | :g/^/exe ": | ||
+ | |||
+ | |||
+ | " ===== 选中范围行首插入行号, | ||
+ | :'<,'> | ||
+ | :'<,'> | ||
+ | |||
+ | " ===== 10行到30行首插入行号, | ||
+ | :10,30 g//exe ": | ||
+ | |||
+ | |||
+ | " ===== 语法解释: 匹配到^的每一行都执行 exe : | ||
+ | |||
+ | |||
+ | " | ||
+ | : | ||
+ | : | ||
+ | : | ||
+ | </ | ||
+ | |||
+ | |||
+ | ==== - 表达式替换 ==== | ||
+ | 比如一个文件内容为: | ||
+ | < | ||
+ | AAAA | ||
+ | AAAA | ||
+ | AAAA | ||
+ | </ | ||
+ | 需要替换为如下样式: | ||
+ | < | ||
+ | BBBB_1 | ||
+ | BBBB_2 | ||
+ | BBBB_3 | ||
+ | </ | ||
+ | 注意看,123分别是行号,可以采用以下命令进行vim替换操作. | ||
+ | < | ||
+ | : | ||
+ | </ | ||
+ | |||
+ | 这里用到的\=,后面就是跟需要的表达式就行。 | ||
+ | |||
+ | |||
+ | ==== - iskeyword ==== | ||
+ | 参考: https:// | ||
+ | |||
+ | <code vim> | ||
+ | iskeyword, 简写为isk | ||
+ | set iskeyword | ||
+ | set isk | ||
+ | </ | ||
+ | |||
+ | 使用 '' | ||
+ | |||
+ | 注意,有的语法加载会修改这个分词,导致使用gvim造成不便。 | ||
+ | |||
+ | 通过执行'' | ||
+ | |||
+ | 如果发现iskeyword被修改,可以单独再把它修改回来,这样避免后面的不便。 | ||
+ | |||
+ | ===== - vim正则表达式 ===== | ||
+ | |||
+ | |||
+ | <code vim> | ||
+ | Vim中的正则表达式 | ||
+ | |||
+ | . 匹配任意一个字符 | ||
+ | [abc] 匹配方括号中的任意一个字符。可以使用-表示字符范围, 如[a-z0-9]匹配小写字母和阿拉伯数字 | ||
+ | [^abc] 在方括号内开头使用^符号,表示匹配除方括号中字符之外的任意字符 | ||
+ | \d 匹配阿拉伯数字,等同于[0-9] | ||
+ | \D 匹配阿拉伯数字之外的任意字符,等同于[^0-9] | ||
+ | \x 匹配十六进制数字,等同于[0-9A-Fa-f] | ||
+ | \X 匹配十六进制数字,等同于[^0-9A-Fa-f] | ||
+ | \w 匹配单词字母,等同于[0-9A-Za-z_] | ||
+ | \W 匹配单词字母之外的任意字符,等同于[^0-9A-Za-z_] | ||
+ | \t 匹配< | ||
+ | \s 匹配空白字符,等同于[ \t] | ||
+ | \S 匹配非空白字符,等同于[^ \t] | ||
+ | \a 所有的字母字符. 等同于[a-zA-Z] | ||
+ | \l 小写字母 [a-z] | ||
+ | \L 非小写字母 [^a-z] | ||
+ | \u 大写字母 [A-Z] | ||
+ | \U 非大写字母 [^A-Z] | ||
+ | |||
+ | 表示数量的元字符 | ||
+ | * 匹配0-任意个 | ||
+ | \+ 匹配1-任意个 | ||
+ | \? 匹配0-1个 | ||
+ | \{n,m} 匹配n-m个 | ||
+ | \{n} 匹配n个 | ||
+ | \{n,} 匹配n-任意个 | ||
+ | \{,m} 匹配0-m个 | ||
+ | \_. 匹配包含换行在内的所有字符 | ||
+ | \{-} 表示前一个字符可出现零次或多次,但在整个正则表达式可以匹配成功的前提下,匹配的字符数越少越好 | ||
+ | \= 匹配一个可有可无的项 | ||
+ | \_s 匹配空格或断行 | ||
+ | \_[] | ||
+ | \* 匹配 * 字符 | ||
+ | \. 匹配 . 字符 | ||
+ | \/ 匹配 / 字符 | ||
+ | \\ 匹配 \ 字符 | ||
+ | \[ 匹配 [ 字符 | ||
+ | |||
+ | 表示位置的符号 | ||
+ | $ 匹配行尾 | ||
+ | ^ 匹配行首 | ||
+ | \< 匹配单词词首 | ||
+ | \> 匹配单词词尾 | ||
+ | |||
+ | 替换变量 | ||
+ | 在正规表达式中使用 和 符号括起正规表达式,即可在后面使用\1、\2等变量来访问 和 中的内容 | ||
+ | |||
+ | 懒惰模式 | ||
+ | \{-n,m} 与\{n, | ||
+ | \{-} 匹配它前面的项一次或0次, | ||
+ | \| " | ||
+ | \& 并列 | ||
+ | |||
+ | 函数式 | ||
+ | : | ||
+ | 在函数式中可以使用 submatch(1)、submatch(2) 等来引用 \1、\2 等的内容,而submatch(0)可以引用匹配的整个内容 | ||
+ | |||
+ | 与Perl正则表达式的区别 | ||
+ | |||
+ | Vim语法 Perl语法 含义 | ||
+ | \+ | ||
+ | \? ? | ||
+ | \{n, | ||
+ | 和 | ||
+ | |||
+ | 例如: | ||
+ | 1, | ||
+ | 2, | ||
+ | 3, | ||
+ | 4, | ||
+ | |||
+ | : | ||
+ | : | ||
+ | :%s/\w\+, \w\+/\2 \1/ 将 Doe, John 修改为 John Doe | ||
+ | : | ||
+ | : | ||
+ | 将每行开头的单词替换为(行号-10).单词的格式, | ||
+ | 排序 :/ | ||
+ | </ |