- https://www.gnu.org/software/global/download.html
- pip install -U pygments
源码
我们可以使用alt + mouse来拷贝。
./configure --with-features=huge\
--enable-multibyte\
--enable-rubyinterp=yes\
--enable-pythoninterp=yes\
--with-python-config-dir=/lib64/python2.7/config\
--enable-perlinterp=yes\
--enable-luainterp=yes\
--enable-cscope\
--prefix=/usr/local
# ycm编译
cmake -G "Unix Makefiles" -DPATH_TO_LLVM_ROOT=/usr/local/ . ~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp
## ubuntu等使用系统clang编译
mkdir ycm_build
cd ycm_build
cmake -G "Unix Makefiles" . ~/.vim/plugged/YouCompleteMe/third_party/ycmd/cpp -DUSE_SYSTEM_BOOST=ON -DEXTERNAL_LIBCLANG_PATH=/usr/lib/x86_64-linux-gnu/libclang-3.8.so.1
# command_json 软连接
ln -s build/compile_commands.json -rt ./
注意使用
let g:ycm_server_python_interpreter="/usr/local/bin/python3.7", 来指定python的版本
*手册
-
Ctrl + g 查看当前光标的位置
-
g_ 到最后一个非空白字符上
-
g; go to last edit
-
g, 返回新的跳动的位置
-
ctrl + e : scroll one line down
-
ctrl + y : scroll one line up
-
ctrl + d : scroll half page down
-
ctrl + u : scroll half page up
-
ctrl + f : scroll one page donw
-
ctrl + b : scroll one page up
例子:
{foo(x, y, |bar(), baz());}
d[( : exclusive motion so result is {foo|bar(), baz());}
d]) : exclusive motion so result is {foo(x, y, |)}
d<( : inclusive motion so result is {foo(|bar(), baz());}
d>) : inclusive motion so result is {foo(x, y, |)} as same as d])
一般我们操作的是一个个字符串,vim允许用户操作一个单词,一段句子,这里的单词,句子就可以当成是文本对象。 在vim中的文本编辑命令符合下面的模式:
<number><command><text object or motion>
- The number is used to perform the command over multiple text objects or motions, e.g., backward three words, forward two paragraphs. The number is optional and can appear either before or after the command.
- The command is an operation, e.g., change, delete (cut), or yank (copy). The command is also optional; but without it, you only have a motion command, not an edit command
- The text object or motion can either be a text construct, e.g., a word, a sentence, a paragraph, or a motion, e.g., forward a line, back one page, end of the line.
简单的文本对象
words
- aw – a word (includes surrounding white space)
- iw – inner word (does not include surrounding white space)
sentence
- as – a sentence
- is – inner sentence
Paragraph
- ap – a paragraph
- ip – inner paragraph
motions command and text object command
区别:
- cw 是从当前光标处开始改写
- ciw 则是将整个单词开始改写
programming language text objects
- a" – a double quoted string
- i" – inner double quoted string
- a' – a single quoted string
- i' – inner single quoted string
- a` – a back quoted string
- i` – inner back quoted string
parenthese
- a) – a parenthesized block
- i) – inner parenthesized block
brackets
- a] a bracketed block
- i] inner bracketed block
braces
- a} – a brace block
- i} – inner brace block
markup language tags
- at – a tag block
- it – inner tag block
a single tag
- a> – a single tag
- i> – inner single tag
An editing command is a command plus a text object or motion, e.g., delete this word, change the next sentence, copy this paragraph.
- ( sentences backward
- ) sentences forward
- { paragraphs backward.
- } paragraphs forward
这个插件主要用来操作文本对象:
-
cs"' 将双引号改成单引号 "hello wrold " ---> 'hello world'
-
cs"
将"helo world" 改成
hello world
-
cs 命令有两个参数:a target and a replacement
-
ds 命令用来删除target
-
ys takes a valid Vim motion or text object as the first object, and wrap it using the second argument as with cs. hello wo*rld 使用命令ysiw) ,那么会变成 hello (world)
- https://github.com/skywind3000/awesome-cheatsheets/blob/master/editors/vim.txt
- http://www.skywind.me/blog/archives/2084 vim8下的C/C++环境配置
- http://www.skywind.me/blog/archives/1846 vim 中正确使用Alt映射
- https://github.com/wsdjeg/vim-galore-zh_cn#%E4%BB%80%E4%B9%88%E6%98%AF-vim
- http://people.csail.mit.edu/vgod/vim/vim-cheat-sheet-en.png
- https://devhints.io/vimscript-functions
- 函数手册
可以重复上一次的编辑命令,比如:
int foo(char *s, int len) {
char *p = s;
for (char *e = s+len; p < e; p++)
/* do something */ ;
return len / 2;
}
你可以:
- 将光标放在第一个len上,按* 键高亮选择所有的len单词,并跳到下一个len上
- 按N 键返回到第一个len上,按ciwn 将第一个len改成n
- 按n 调到第二个len上,按.
- 按n 调到第三个len上,按.
-
用来删除一个字符
-
用来删除一个单词
-
删除到开始 这些操作也可以在命令和shel中使用。
-
r 替换当前字符
-
R 进入替换模式,直至 ESC 离开
-
s 替换字符(删除光标处字符,并进入插入模式,前可接数量)
-
S 替换行(删除当前行,并进入插入模式,前可接数量)
-
cc 改写当前行(删除当前行并进入插入模式),同 S
-
cw 改写光标开始处的当前单词
-
ciw 改写光标所处的单词
-
caw 改写光标所处的单词,并且包括前后空格(如果有的话)
-
c0 改写到行首
-
c^ 改写到行首(第一个非零字符)
-
c$ 改写到行末
-
ci" 改写双引号中的内容
-
ci' 改写单引号中的内容
-
ci) 改写小括号中的内容
-
ci] 改写中括号中内容
-
ci} 改写大括号中内容
-
cit 改写 xml tag 中的内容
-
cis 改写当前句子
-
c2w 改写下两个单词
-
ct( 改写到小括号前
-
x 删除当前字符,前面可以接数字,3x代表删除三个字符
-
X 向前删除字符
-
dd 删除当前行
-
d0 删除到行首
-
d^ 删除到行首(第一个非零字符)
-
d$ 删除到行末
-
D 删除到行末(同 d$)
-
dw 删除当前单词
-
diw 删除光标所处的单词
-
daw 删除光标所处的单词,并包含前后空格(如果有的话)
-
di" 删除双引号中的内容
-
di' 删除单引号中的内容
-
di) 删除小括号中的内容
-
di] 删除中括号中内容
-
di} 删除大括号中内容
-
dit 删除 xml tag 中的内容
-
dis 删除当前句子
-
d2w 删除下两个单词
-
dt( 删除到小括号前
-
dgg 删除到文件头部
-
dG 删除到文件尾部
-
d} 删除下一段
-
d{ 删除上一段
-
u 撤销
-
U 撤销整行操作
-
CTRL-R 撤销上一次 u 命令
-
J 链接多行为一行
-
. 重复上一次操作
-
~ 替换大小写
-
g~iw 替换当前单词的大小写
-
gUiw 将单词转成大写
-
guiw 将当前单词转成小写
-
guu 全行转为小写
-
gUU 全行转为大写
-
<< 减少缩进
-
>> 增加缩进
-
== 自动缩进
-
CTRL-A 增加数字
-
CTRL-X 减少数
- CTRL-O 跳转到上一个位置
- CTRL-I 跳转到下一个位置
- CTRL-^ 跳转到 alternate file (当前窗口的上一个文件)
- % 跳转到 {} () [] 的匹配
- gd 跳转到局部定义(光标下的单词的定义)
- gD 跳转到全局定义(光标下的单词的定义)
- gf 打开名称为光标下文件名的文件
- [[ 跳转到上一个顶层函数(比如C语言以大括号分隔), 这个地方只有C, Python语言好像是这样,
- ]] 跳转到下一个顶层函数(比如C语言以大括号分隔)
- [m 跳转到上一个成员函数
- ]m 跳转到下一个成员函数
- [{ 跳转到上一处未匹配的 {
- ]} 跳转到下一处未匹配的 }
- [( 跳转到上一处未匹配的 (
- ]) 跳转到下一处未匹配的 )
- [c 上一个不同处(diff时)
- ]c 下一个不同处(diff时)
- [/ 跳转到 C注释开头
- ]/ 跳转到 C注释结尾
$ 到行末 0 到行首 ^ 到行首非空字符 tx 光标位置到字符 x 之前 fx 光标位置到字符 x 之处 iw 整个单词(不包括分隔符) aw 整个单词(包括分隔符) iW 整个 WORD(不包括分隔符) aW 整个 WORD(包括分隔符) is 整个句子(不包括分隔符) ib 小括号内 ab 小括号内(包含小括号本身) iB 大括号内 aB 大括号内(包含大括号本身) i) 小括号内 a) 小括号内(包含小括号本身) i] 中括号内 a] 中括号内(包含中括号本身) i} 大括号内 a} 大括号内(包含大括号本身) i' 单引号内 a' 单引号内(包含单引号本身) i" 双引号内 a" 双引号内(包含双引号本身) 2i) 往外两层小括号内 2a) 往外两层小括号内(包含小括号本身) 2f) 到第二个小括号处 2t) 到第二个小括号前
- :h tutor 入门文档
- :h quickref 快速帮助
- :h index 查询 Vim 所有键盘命令定义
- :h summary 帮助你更好的使用内置帮助系统
- :h CTRL-H 查询普通模式下 CTRL-H 是干什么的
- :h i_CTRL-H 查询插入模式下 CTRL-H 是干什么的
- :h i_ 查询插入模式下方向键上是干什么的 :h pattern.txt 正则表达式帮助
- :h eval 脚本编写帮助
- :h function-list 查看 VimScript 的函数列表
- :h windows.txt 窗口使用帮助
- :h tabpage.txt 标签页使用帮助
- :h +timers 显示对 +timers 特性的帮助
- :h :! 查看如何运行外部命令
- :h tips 查看 Vim 内置的常用技巧文档
- :h set-termcap 查看如何设置按键扫描码
- :viusage NORMAL 模式帮助
- :exusage EX 命令帮助
- :version 显示当前 Vim 的版本号和特性
- :h motion.txt 查看移动的快捷键
- /pattern 从光标处向文件尾搜索 pattern
- ?pattern 从光标处向文件头搜索 pattern
- n 向同一方向执行上一次搜索
- N 向相反方向执行上一次搜索
- * 向前搜索光标下的单词
- # 向后搜索光标下的单词
- :s/p1/p2/g 将当前行中全替换p1为p2
- :%s/p1/p2/g 将当前文件中全替换p1为p2
- :%s/p1/p2/gc 将当前文件中全替换p1为p2,并且每处询问你是否替换
- :10,20s/p1/p2/g 将第10到20行中所有p1替换为p2
- :%s/1\2/3/123/g 将“1\2/3” 替换为 “123”(特殊字符使用反斜杠标注)
- :%s/\r//g 删除 DOS 换行符 ^M
- <C-[>
- 回归到Insert-normal模式
- Ctrl + G,跳到下一个位置
- Ctrl + T 跳到上一个位置
- 将securecrt中的键盘映射方案调整为这里下载的文件[https://github.com/skywind3000/vim/blob/master/tools/conf/securecrt.key]
- 然后调整在global options中选择,default session,use alt key as meta key,注意保存的时候,选择change default session
- e - : 用-来表示注释块
- e = : 用=来表示注释块
- e c : copy
- f h : 打开实现,或头文件
- f t 在当前buffer中打开目录
- f e 分裂出一个窗口,然后选择文件编辑
- f o 在整个buffer打开目录选择
- gb 跳转到声明
- gl 跳转到实现
- gx 声明或实现
- g1 grep 当前光标的文字
- g2 同样是grep当前光标的内容
- g3 cscope 全局查找内容
- g4 cscope 当前文件查找
- alt-m : 列出之前打开过的文件
- alt-u: 列出buffer
- alt-t : 列出当前tags
- alt-p :列出函数名
- p : 列出文件
- tab - [h j k l]窗口的移动
Vim 是一个文本编辑器。每次文本都是作为缓冲区的一部分显示的。每一份文件都是在他们自己独有的缓冲区打开的,插件显示的内容也在它们自己的缓冲区中。
缓冲区有很多属性,比如这个缓冲区的内容是否可以修改,或者这个缓冲区是否和文件相关联,是否需要同步保存到磁盘上。
窗口
是缓冲区上一层的视窗。如果你想同时查看几个文件或者查看同一文件的不同位置,那样你会需要窗口。
请别把他们叫做 分屏 。你可以把一个窗口分割成两个,但是这并没有让这两个窗口完全 分离 。
窗口可以水平或者竖直分割并且现有窗口的高度和宽度都是可以被调节设置的,因此,如果你需要多种窗口布局,请考虑使用标签。
标签页 (标签)是窗口的集合。因此当你想使用多种窗口布局时候请使用标签。
简单的说,如果你启动 Vim 的时候没有附带任何参数,你会得到一个包含着一个呈现一个缓冲区的窗口的标签。
顺带提一下,缓冲区列表是全局可见的,你可以在任何标签中访问任何一个缓冲区。
返回主目录 arrow_heading_up
设置alt key为meta key
保存时注意选中