vim常用命令以及配置文件


layout: article

title: "vim文本编译器"


vim文本编辑器

有三种模式: 命令模式 文本模式, 末行模式

vim命令大全 - 知乎 (zhihu.com)

命令模式

插入

bash 复制代码
i: 切换到输入模式,在光标当前位置开始输入文本。
a: 进入插入模式,在光标下一个位置开始输入文本。
o: 在当前行的下方插入一个新行,并进入插入模式。
I:在一行的开头添加文本 
A: 在一行的结尾处添加文本
O: 在当前行的上方插入一个新行,并进入插入模式。
s: 删除当前光标处的字符并进入到插入模式
S: 删除光标所在处的行,并进入到插入模式

撤销操作

c 复制代码
u: 撤销修改
Ctrl + r: 反撤销

删除

bash 复制代码
字符删除
x:  删除当前光标所在处的字符
X:  删除当前光标左边的字符

单词删除
dw:  删除一个单词(从光标处到空格)
daw:  无论光标在什么位置,删除光标所在的整个单词(包括空白字符)
diw:  删除整个单词文本,但是保留空格字符不删除
d2w:  删除从当前光标开始处的2个单词
d$:  删除从光标到一行末尾的整个文本
d0:  删除从光标到一行开头的所有单词
dl:  删除当前光标处的字符=x
dh:  删除当前光标左边的字符=X

行删除
dd:  删除当前光标处的一整行(剪切)
5dd:  删除从光标开始处的5行代码
dgg:  删除从光标到文本开头
dG:  删除从光标到文本结尾
D: 删除从光标到文本结尾

行合并
J:  删除一个分行符,将当前行与下一行合并

移动

bash 复制代码
h: 左
j: 下
k: 上
l: 右
行号G 跳转到第n行
gg: 文本开始
G: 文本结束
%: 在一个括号上面使用这一个, 跳转到另一半括号
0: 行首
$: 行尾

查找

c 复制代码
*: 找到这一个符号出现的下一个位置
#: 这一个符号的前一个位置

格式化代码

c 复制代码
gg=G

替换

bash 复制代码
r: 替换单个字符, 按一下再按一下需要的字符

复制

bash 复制代码
yy: 复制一行

粘贴

bash 复制代码
p: 有复制换行的时候在这一行的下一行粘贴, 没有的话是在这一点的后面
P: 这一行的前一行

看手册

K: 跳转到man手册里面, 默认第一卷匹配的
nK: 在第n卷里面找

查看宏定义

[d: 查看这一个的宏定义

退出

bash 复制代码
ZZ 保存退出

末行模式

进入

bash 复制代码
:

退出

bash 复制代码
ESC 两次

也可以执行一次末行命令

bash 复制代码
w: 保存
q: 退出

跳转

bash 复制代码
:行号

查找替换

bash 复制代码
/string   正向查找
?string   反向查找

设置高亮显示
    :set hls
    *按键将当前光标处的单词高亮显示,使用n浏览下一个查找高亮的结果
:s/old/new   将当前行的第一个字符串old替换为new
:s/old/new/g   将当前行的所有字符串old替换为new
:90s/old/new/g  将指定行的所有字符串old替换为new
:90,93s/old/new/g  将指定范围的行的所有字符串old替换为new
:%s/old/new/g   将文本中所有的字符串old替换为new
:%s/old/new/gc  依次替换每个字符串关键字
:%s/^struct/int/g   将所有以struct开头的字符串替换为int

回车以后: n: 下一个 N: 上一个

上一次, 下一次的命令

Ctrl p: 上一次

Ctrl n: 下一个

分屏

bash 复制代码
:sp 上下分屏(默认光标第一个屏幕)
Ctrl + ww: 换屏幕
:q 退出当前窗口
:qall 退出所有
:vsp 竖屏

执行命令

:!命令

直接执行这一个命令

在使用之前需要w保存一下

可视模式

进入

v :命令模式按v

选中区域删除

c 复制代码
d: 选中按d

复制

c 复制代码
y: 复制选中的区域

配置

{:.shadow}

{:.shadow}

配置文件

Vim---配置实用的.vimrc文件 - XNQC - 博客园 (cnblogs.com)

  • 下面是我使用的没有使用插件的, 基本和这一个一样

    "=========================================================================
    "
    "" DesCRiption: 适合自己使用的vimrc文件,for Linux/Windows, GUI/Console
    "
    ""=========================================================================
    syntax on "自动语法高亮
    "winpos 5 5 " 设定窗口位置
    "set lines=40 columns=155 " 设定窗口大小
    "set nu " 显示行号
    set go= " 不要图形按钮
    "color asmanian2 " 设置背景主题
    set guifont=Courier_New:h10:cANSI " 设置字体
    "syntax on " 语法高亮
    "autocmd InsertLeave * se nocul " 用浅色高亮当前行
    "autocmd InsertEnter * se cul " 用浅色高亮当前行
    "set ruler " 显示标尺
    set showcmd " 输入的命令显示出来,看的清楚些
    "set cmdheight=1 " 命令行(在状态行下)的高度,设置为1
    "set whichwrap+=<,>,h,l " 允许backspace和光标键跨越行边界(不建议)
    "set scrolloff=3 " 光标移动到buffer的顶部和底部时保持3行距离
    set novisualbell " 不要闪烁(不明白)
    "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime("%d/%m/%y\ -\ %H:%M")} "状态行显示的内容
    "set laststatus=1 " 启动显示状态行(1),总是显示状态行(2)
    set foldenable " 允许折叠
    set foldmethod=manual " 手动折叠
    "set background=dark "背景使用黑色
    set nocompatible "去掉讨厌的有关vi一致性模式,避免以前版本的一些bug和局限
    " 显示中文帮助
    if version >= 603
    set helplang=cn
    set encoding=utf-8
    endif
    " 设置配色方案
    "colorscheme murphy
    "字体
    "if (has("gui_running"))
    " set guifont=Bitstream\ Vera\ Sans\ Mono\ 10
    "endif

    set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936
    set termencoding=utf-8
    set encoding=utf-8
    set fileencodings=ucs-bom,utf-8,cp936
    set fileencoding=utf-8"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    """""新文件标题""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "新建.c,.h,.sh,.java文件,自动插入文件头
    autocmd BufNewFile .cpp,.[ch],.sh,.java exec ":call SetTitle()"
    ""定义函数SetTitle,自动插入文件头
    func SetTitle()
    "如果文件类型为.sh文件
    if &filetype == 'sh'
    call setline(1,"#########################################################################")
    call append(line("."), "# File Name: ".expand("%"))
    call append(line(".")+1, "# Author: XvSenfeng")
    call append(line(".")+2, "# mail: 1458612070@qq.com")
    call append(line(".")+3, "# Created Time: ".strftime("%c"))
    call append(line(".")+4, "#########################################################################")
    call append(line(".")+5, "#!/bin/bash")
    call append(line(".")+6, "")
    else
    call setline(1, "/*************************************************************************")
    call append(line("."), " > File Name: ".expand("%"))
    call append(line(".")+1, " > Author: XvSenfeng")
    call append(line(".")+2, " > Mail: 1458612070@qq.com ")
    call append(line(".")+3, " > Created Time: ".strftime("%c"))
    call append(line(".")+4, " ************************************************************************/")
    call append(line(".")+5, "")
    endif
    if &filetype == 'cpp'
    call append(line(".")+6, "#include<iostream>")
    call append(line(".")+7, "using namespace std;")
    call append(line(".")+8, "")
    endif
    if &filetype == 'c'
    call append(line(".")+6, "#include<stdio.h>")
    call append(line(".")+7, "")
    endif
    "新建文件后,自动定位到文件末尾
    autocmd BufNewFile * normal G
    endfunc
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
    "键盘命令
    """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""

    nmap <leader>w :w!<cr>
    nmap <leader>f :find<cr>

    " 映射全选+复制 ctrl+a
    map <C-A> ggVGY
    map! <C-A> <Esc>ggVGY
    map <F12> gg=G
    " 选中状态下 Ctrl+c 复制
    vmap <C-c> "+y
    "去空行
    nnoremap <F2> :g/^\s*/d "比较文件 nnoremap :vert diffsplit "新建标签 map :tabnew "列出当前目录文件 map :tabnew . "打开树状文件目录 map \be "C,C++ 按F5编译运行 map :call CompileRunGcc() func! CompileRunGcc() exec "w" if &filetype == 'c' exec "!g++ % -o %<" exec "! ./%<" elseif &filetype == 'cpp' exec "!g++ % -o %<" exec "! ./%<" elseif &filetype == 'java' exec "!javac %" exec "!java %<" elseif &filetype == 'sh' :!./% endif endfunc "C,C++的调试 map :call Rungdb() func! Rungdb() exec "w" exec "!g++ % -g -o %<" exec "!gdb ./%<" endfunc """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" ""实用设置 """"""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""" " 设置当文件被改动时自动载入 set autoread " quickfix模式 autocmd FileType c,cpp map :w:make "代码补全 set completeopt=preview,menu "允许插件 filetype plugin on "共享剪贴板 set clipboard+=unnamed "从不备份 set nobackup "make 运行 :set makeprg=g++\ -Wall\ \ % "自动保存 set autowrite "set ruler " 打开状态栏标尺 set cursorline " 突出显示当前行 set magic " 设置魔术 set guioptions-=T " 隐藏工具栏 set guioptions-=m " 隐藏菜单栏 "set statusline=\ %<%F[%1*%M%*%n%R%H]%=\ %y\ %0(%{&fileformat}\ %{&encoding}\ %c:%l/%L%)\ " 设置在状态行显示的信息 set foldcolumn=0 set foldmethod=indent set foldlevel=3 set foldenable " 开始折叠 " 不要使用vi的键盘模式,而是vim自己的 set nocompatible " 语法高亮 set syntax=on " 去掉输入错误的提示声音 set noeb " 在处理未保存或只读文件的时候,弹出确认 set confirm " 自动缩进 set autoindent set cindent " Tab键的宽度 set tabstop=4 " 统一缩进为4 set softtabstop=4 set shiftwidth=4 " 不要用空格代替制表符 set noexpandtab " 在行和段开始处使用制表符 set smarttab " 显示行号 set number " 历史记录数 set history=1000 "禁止生成临时文件 set nobackup set noswapfile "搜索忽略大小写 set ignorecase "搜索逐字符高亮 set hlsearch set incsearch "行内替换 set gdefault "编码设置 set enc=utf-8 set fencs=utf-8,ucs-bom,shift-jis,gb18030,gbk,gb2312,cp936 "语言设置 set langmenu=zh_CN.UTF-8 set helplang=cn " 我的状态行显示的内容(包括文件类型和解码) "set statusline=%F%m%r%h%w\ [FORMAT=%{&ff}]\ [TYPE=%Y]\ [POS=%l,%v][%p%%]\ %{strftime(\"%d/%m/%y\ -\ %H:%M\")} "set statusline=[%F]%y%r%m%*%=[Line:%l/%L,Column:%c][%p%%] " 总是显示状态行 "set laststatus=2 " 命令行(在状态行下)的高度,默认为1,这里是2 set cmdheight=2 " 侦测文件类型 filetype on " 载入文件类型插件 filetype plugin on " 为特定文件类型载入相关缩进文件 filetype indent on " 保存全局变量 set viminfo+=! " 带有如下符号的单词不要被换行分割 set iskeyword+=_,,@,%,#,-
    " 字符间插入的像素行数目
    set linespace=0
    " 增强模式中的命令行自动完成操作
    set wildmenu
    " 使回格键(backspace)正常处理indent, eol, start等
    set backspace=2
    " 允许backspace和光标键跨越行边界
    set whichwrap+=<,>,h,l
    " 可以在buffer的任何地方使用鼠标(类似office中在工作区双击鼠标定位)
    set mouse=a
    set selection=exclusive
    set selectmode=mouse,key
    " 通过使用: commands命令,告诉我们文件的哪一行被改变过
    set report=0
    " 在被分割的窗口间显示空白,便于阅读
    set fillchars=vert:\ ,stl:\ ,stlnc:
    " 高亮显示匹配的括号
    set showmatch
    " 匹配括号高亮的时间(单位是十分之一秒)
    set matchtime=1
    " 光标移动到buffer的顶部和底部时保持3行距离
    set scrolloff=3
    " 为C程序提供自动缩进
    set smartindent
    " 高亮显示普通txt文件(需要txt.vim脚本)
    au BufRead,BufNewFile * setfiletype txt
    "自动补全
    :inoremap ( ()<ESC>i
    :inoremap ) <c-r>=ClosePair(')')<CR>
    :inoremap { {<CR>}<ESC>O
    :inoremap } <c-r>=ClosePair('}')<CR>
    :inoremap [ []<ESC>i
    :inoremap ] <c-r>=ClosePair(']')<CR>
    :inoremap " ""<ESC>i
    :inoremap ' ''<ESC>i
    function! ClosePair(char)
    if getline('.')[col('.') - 1] == a:char
    return "<Right>"
    else
    return a:char
    endif
    endfunction
    filetype plugin indent on
    "打开文件类型检测, 加了这句才可以用智能补全
    set completeopt=longest,menu

相关推荐
奋斗的小花生5 分钟前
c++ 多态性
开发语言·c++
魔道不误砍柴功7 分钟前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
Nu11PointerException9 分钟前
JAVA笔记 | ResponseBodyEmitter等异步流式接口快速学习
笔记·学习
闲晨10 分钟前
C++ 继承:代码传承的魔法棒,开启奇幻编程之旅
java·c语言·开发语言·c++·经验分享
2401_8504108333 分钟前
文件系统和日志管理
linux·运维·服务器
老猿讲编程38 分钟前
一个例子来说明Ada语言的实时性支持
开发语言·ada
XMYX-01 小时前
使用 SSH 蜜罐提升安全性和记录攻击活动
linux·ssh
Chrikk2 小时前
Go-性能调优实战案例
开发语言·后端·golang
亦枫Leonlew2 小时前
三维测量与建模笔记 - 3.3 张正友标定法
笔记·相机标定·三维重建·张正友标定法
幼儿园老大*2 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go