vim的学习总结
光标移动
代码 | 作用 |
---|---|
h | 向左一个字符 |
j | 向下一行 |
k | 向上一行 |
l | 向右一个字符 |
ctrl+f | 屏幕向下翻页 |
ctrl+b | 屏幕向上翻页 |
ctrl+d | 屏幕向下翻半页 |
ctrl+u | 屏幕向上翻半页 |
0 | 开始界面 |
$ | 最后字符 |
复制操作
小写“yy”复制单行;
2yy 复制光标处2行;
nyy 复制光标出n行。
粘贴操作
小写“p”粘贴到当前光标的下一行;
大写“P”粘贴到当前光标的下一行;
删除操作
“dd”删除当前行
“2dd”删除光标处当前两行;
增行操作open
小写“o”,在当前光标处的下一行插入空行;
大写“o”,在当前光标处的上一行插入空行;
查找操作
作用:查找包含关键字的行;
在命令模式下输入“/查找对象”,即可从上往下查找,按n查找(next);
在命令模式下输入“?查找对象”,即可从上往下查找,按n查找(next);
替换操作
行替换:s/被替换对象/新对象/gc,提示后按y即完成替换。
全文替换:%s/被替换对象/新对象/gc,分别按行提示后按y即完成替换。
vim中的查找替换
关于在vim中的查找和替换:https://www.cnblogs.com/huxinga/p/7942194.html
初始模式为normal模式
/test enter 其中n表示向下查找,N表示向上查找.
/vim$ 匹配行尾的"vim",支持正则表达式
/vim\$ 转义字符取消正则表达式.
/test\c 表示查找的时候对于大小写不敏感
* 查找当前单词
g* 查找含有指定单词的字符
:s/foo/bar/g 本行中替换foo为bar
:%s/foo/bar/g 本文中替换foo为bar
:.,+2s/foo/bar/g 当前行.与接下来两行+2:
:%s/foo/bar/gc 对应的替换需要确认
/word 向下查找word的字符串
?word2 向上查找word2的字符串
下一个与上一个用n与N。
:1,29s/word1/word2/g 替换word1为word2.
:1,$s/word1/word2/gc 替换word1为word2.
操作的撤销与恢复
备注:无论是u撤销,还是ctrl+r恢复,前提要是文件不能执行了保存。
小写u:change before(按行,分步骤以时间轴为单位撤销最近的动作)直至already at oldest change(可撤销多步);
大写U:仅撤销一步操作;
Ctrl+r:change after (按行,分步骤以时间轴为单位恢复被撤销的动作)直至already at oldest change;
Ctrl+R:恢复被撤销的,一步到底;
vim 代码缩进
参考链接:https://blog.csdn.net/topasstem8/article/details/6678215
-
特定行缩进
按v进入visual状态,选择多行,用>或<缩进或缩出。 -
通常根据语言特征使用自动缩进排版:在命令状态下对当前行用== (连按=两次), 或对多行用n==(n是自然数)表示自动缩进从当前行起的下面n行。使用gg=G可对整篇代码进行排版。
vim 剪切板
"+yy // 复制当前行到剪切板
"+p // 将剪切板内容粘贴到光标后面\
参考:https://www.cnblogs.com/callmelord/p/11579646.html
关于系统剪切板和vim内部剪切板的关系
let mapleader="'"
所以对应的复制方法为v
进入可视化模式,按钮左右箭头
选中,按钮'y
复制,出来ctrl + v
黏贴。
vim插件配置
插件安装
源码安装vim,需要的步骤是:安装依赖库,下载源码安装.
sudo apt-get install libncurses5-dev libgnome2-dev libgnomeui-dev \
libgtk2.0-dev libatk1.0-dev libbonoboui2-dev \
libcairo2-dev libx11-dev libxpm-dev libxt-dev python-dev \
python3-dev ruby-dev lua5.1 lua5.1-dev git
git clone https://github.com/vim/vim.git
cd vim
./configure --with-features=huge \
--enable-multibyte \
--enable-rubyinterp \
--enable-pythoninterp \
--with-python-config-dir=/usr/lib/python2.7/config-x86_64-linux-gnu \
--enable-perlinterp \
--enable-luainterp \
--enable-gui=gtk2 --enable-cscope --prefix=/usr
make VIMRUNTIMEDIR=/usr/share/vim/vim80
sudo make install
vim
:version #测试是否支持python
插件安装
youcompleteme安装
cd .vim/bundle/YouCompleteMe/
sudo apt install build-essential cmake python3-dev
git submodule update --init --recursive
python3 install.py --all
AttributeError: ‘module’ object has no attribute ‘FlagsForFile’
cd ~/.vim/bundle/YouCompleteMe/third_party/ycmd/ycmd/tests/clang/testdata
cp .ycm_extra_conf.py ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp/ycm/
vim81->vim80,按照说明解决缺少的文件,得按要求重新安装yum,readme.
目前使用的C程序vimrc设置
"设置行号
set number
"打开语法高亮
syntax on
"显示当前键入的指令
set showcmd
"使用utf-8编码
set encoding=utf-8
"启用256色
set t_Co=256
"打开文件类型检查对应缩进
filetype indent on
"设置自动缩进
set autoindent
"光标所在的当前行高亮
set cursorline
"在状态栏显示光标的当前位置
set ruler
"搜索时,高亮显示匹配结果
set hlsearch
"光标遇到圆括号、方括号、大括号时,自动高亮对应的另一个圆括号、方括号和大括号。
set showmatch
"命令模式下,底部操作指令按下 Tab 键自动补全
set wildmenu
set wildmode=longest:list,full
" 开启文件类型侦测
filetype on
" 根据侦测到的不同类型加载对应的插件
filetype plugin on
" 自动缩进
filetype indent on
" 开启语法高亮功能
syntax enable
set incsearch
"开启实时搜索功能
set ignorecase
"搜索忽略大小写
set wildmenu
"vim命令自动补全
set gcr=a:block-blinkon0 "禁止关闭闪烁
set laststatus=2 "总是显示状态栏
set ruler "显示光标位置
set number "显示行号
set cursorline "高亮显示当前行
"set cursorcolumn "高亮显示当前列
set hlsearch "高亮显示搜索结果
" 将制表符扩展为空格
set expandtab
" 设置编辑时制表符占用空格数
set tabstop=4
" 基于缩进或语法进行代码折叠
set foldmethod=syntax
set nofoldenable
" 启动 vim 时关闭折叠代码
" 定义快捷键的前缀,即<Leader>
"let mapleader="\<space>"
let mapleader="'"
" 设置快捷键将选中文本块复制至系统剪贴板
vnoremap <Leader>y "+y
" 设置快捷键将系统剪贴板内容粘贴至 vim
nmap <Leader>p "+p
" ************** 插件管理与设置 ************ "
" vundle 环境设置
filetype off
set rtp+=~/.vim/bundle/Vundle.vim
" vundle 管理的插件列表必须位于 vundle#begin() 和 vundle#end() 之间
call vundle#begin()
Plugin 'VundleVim/Vundle.vim'
Plugin 'Lokaltog/vim-powerline' "status 美化
Plugin 'octol/vim-cpp-enhanced-highlight' "对c++语法高亮增强
Plugin 'kshenoy/vim-signature' "书签可视化的插件
Plugin 'vim-scripts/BOOKMARKS--Mark-and-Highlight-Full-Lines' "书签行高亮
Plugin 'majutsushi/tagbar' "taglist的增强版,查看标签,依赖于ctags
Plugin 'scrooloose/nerdcommenter' "多行注释,leader键+cc生成, leader+cu删除注释
Plugin 'scrooloose/nerdtree' "文件浏览
"Plugin 'Valloric/YouCompleteMe' "自动补全
Plugin 'kien/ctrlp.vim' "搜索历史打开文件,在命令行模式下按ctrl+p触发
Plugin 'vim-scripts/grep.vim' "在命令行模式使用grep命令,:Grep
Plugin 'Lokaltog/vim-easymotion' "快速跳转,按两下leader键和f组合
Plugin 'vim-scripts/ShowTrailingWhitespace.git' "高亮显示行尾的多余空白字符
Plugin 'vim-scripts/indentpython.vim.git'
Plugin 'vim-scripts/Solarized.git' "主题方案
Plugin 'nathanaelkane/vim-indent-guides.git' "缩进对齐显示
"Plugin 'vim-scripts/indexer.tar.gz' "自动生成标签
"Plugin 'vim-scripts/DfrankUtil' "indexer 依赖
"Plugin 'vim-scripts/vimprj' "indexer 依赖
Plugin 'davidhalter/jedi-vim' "python 补全,不依赖于tags,但比较慢,可以使用indexer替换,但不能跳转项目外
Plugin 'vim-scripts/Markdown'
Plugin 'tpope/vim-surround'
Plugin 'ekalinin/Dockerfile.vim'
" 插件列表结束
call vundle#end()
filetype on