基础能力系列 - Vim的使用
Posted 搬砖魁首
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基础能力系列 - Vim的使用相关的知识,希望对你有一定的参考价值。
vi和vim它们都是多模式编辑器,不同的是vim是vi的升级版本,它不仅兼容vi的所有指令,而且还有一些新的特性在里面。vi使用于文本编辑,但是vim更适用于coding。
本文旨在抛砖引玉, 求将vim作为IDE的牛人的个性化配置
模式
vi有3个模式:插入模式、命令模式、低行模式。
- 插入模式:在此模式下可以输入字符,按ESC将回到命令模式。
- 命令模式:可以移动光标、删除字符等。
- 低行模式:可以保存文件、退出vi、设置vi、查找等功能(低行模式也可以看作是命令模式里的)。
常用命令
一、打开文件、保存、关闭文件(命令模式下使用)
vi filename //打开filename文件
:w //保存文件
:w xxxx.txt //保存至xxxx.txt文件
:q //退出编辑器,如果文件已修改请使用下面的命令
:q! //退出编辑器,且不保存
:wq //退出编辑器,且保存文件
shift+zz //退出编辑器,且保存文件 [*]
二、插入文本或行(命令模式下使用,执行下面命令后将进入插入模式,按ESC键可退出插入模式)
a //在当前光标位置的右边添加文本
i //在当前光标位置的左边添加文本 [*]
A //在当前行的末尾位置添加文本
I //在当前行的开始处添加文本(非空字符的行首)
O //在当前行的上面新建一行
o //在当前行的下面新建一行 [*]
R //替换(覆盖)当前光标位置及后面的若干文本
J //合并光标所在行及下一行为一行(依然在命令模式)
三、其它常用命令
u //撤消
e! //放弃修改,重新回到文件打开时的状态
~ //修改光标下字符的大小写 [*]
dd //删除光标所在行 [*]
v //进入可视化模式(可移动光标选择文本)
y //复制 [*]
p //将剪贴板中的内容粘贴到光标位置之后
P //将剪贴板中的内容粘贴到光标位置之前
yw //复制一个单词
y2w //复制 2 个单词
y$ //复制从当前光标到行结尾的所有单词
y0 //复制从当前光标到行首的所有单词
yy //复制一整行 [*]
2yy //复制从当前光标所在行开始的 2 行
V //选中一整行 [*]
Vp //粘贴一整行 [*]
:%s/old/new/g //将文本中所有的字符串 old 替换为 new [*]
四、标签页
标签页的新建
:tabedit file
:tab split
标签页的切换
:tabn/tabp
或使用按键:gt/gT
标签页的关闭
:tabclose 关闭当前的标签页,:tabonly
五、多窗口(分隔)
分割窗口
split/vsplit filename
可简写为sp/vs filename [推荐]
窗口间跳转
ctrl+w h/j/k/l
ctrl+w w [推荐]
vim窗口移动
ctrl+w H/J/K/L
调整窗口尺寸
ctrl+w +/- 调整窗口的高度
ctrl+w </> 调整窗口的宽度
ctrl+w = 所有的窗口设置相同的尺寸
:resize n 将当前窗口尺寸调整为 N 行
关闭窗口
close: 关闭一个窗口
qall: 退出所有窗口
qall!: 放弃修改,退出所有窗口
wqall: 保存并退出所有窗口
wall: 保存所有窗口
个性化配置
- 基本的配置,缩进显示行号等
- 文件创建时间, 给每个 C/C++ 文件添加头部,作者等信息
- F5 编译执行 C/C++源代码 (需要安装clang)
- Ctrl + F 利用用 astyle 格式化代码 (需要安装astyle)
- 使用 clang_complete 对代码进行补全 (需要安装clang, Ctrl+n, Ctrl+p)
vim ~/.vimrc
set number
syntax on
" -- New file .h .c .cpp, add file header --
autocmd BufNeWFile *.[ch],*.cpp exec ":call CFileHeader()"
func CFileHeader()
call setline(0, "// File: ".strftime(expand('%d')))
call append(line("."), "// Author: ryan (email)")
call append(line(".")+0, "// Date: " .strftime("%Y/%m/%d %H:%M:%S"))
call append(line(".")+1, "")
exec "$"
endfunc
" -- .c .cpp .h file indent --
autocmd BufEnter *.[ch],*.cpp exec ":call CFileIndent()"
func CFileIndent()
set cindent
set tabstop=3
set softtabstop=3
set expandtab
set shiftwidth=3
endfunc
" -- Use Astyle to format code, <Ctrl + F> --
func CodeFormat()
exec "w"
if &filetype == "h"
exec "!astyle -n --style=kr -s3 %"
elseif &filetype == "c"
exec "!astyle -n --style=kr -s3 %"
elseif &filetype == "cpp"
exec "!astyle -n --style=google %"
endif
endfunc
map <C-F> :call CodeFormat() <CR>
" -- F4 compile and run code --
func CompileC()
exec "w"
let compilecmd = "!clang "
if search("math\\.h") != -1
let compileflag .= "-lm"
endif
exec compilecmd." % ".compileflag
endfunc
func CompileCpp()
exec "w"
let compilecmd = "!clang++ "
let compileflag = ""
exec compilecmd." % ".compileflag
endfunc
func CompileRun()
exec "w"
if &filetype == "c"
exec "call CompileC()"
elseif &filetype == "cpp"
exec "call CompileCpp()"
endif
exec "! ./a.out"
endfunc
map<F4> <ESC> :call CompileRun() <CR>
" use clang_complete complete code
let g:clang_library_path = '/usr/lib/llvm-10/lib'
练练手
vim test.cpp
#include <iostream>
#include <string>
using namespace std;
int main()
cout << "hello world" << endl;
return 0;
g++ -o test main.cpp | ./test
以上是关于基础能力系列 - Vim的使用的主要内容,如果未能解决你的问题,请参考以下文章