Vim相关

Posted feisonzl

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vim相关相关的知识,希望对你有一定的参考价值。

1 Vim

1.1 Vim常用插件

1.ctags

<ctrl+t>:ctags 回退
<ctrl+]>:ctags 查找定义

2.minibuff

:bn	下一个buffer
:bf 上一个buffer

3.Taglist

 let Tlist_WinWidth = 35//tlist 窗口宽度

4.YCM

1.wget -qO- https://raw.github.com/ma6174/vim/master/setup.sh | sh -x
2.YCM
http://www.alexeyshmalko.com/2014/youcompleteme-ultimate-autocomplete-plugin-for-vim/

5.winmanager

 let g:winManagerWidth = 35//winmanager 窗口宽度

1.2 vim配置文件:

普通用户:~/.vimrc
root:/root/.vimrc

hi Comment ctermfg =green                      //注释颜色
hi String ctermfg =darkred                         //修改字符串颜色
hi Type ctermfg =yellow                             //修改类型颜色
hi Number ctermfg =darkblue                    //修改数字颜色
hi Constant ctermfg =blue                         //修改常量颜色
hi Statement ctermfg =darkyellow            //修改声明颜色
(hi也可用highlight)

1.3 vim常用命令

增删改插:
A:在行末插入字符
a:在光标后插入字符
i:在光标前插入字符
I:在行首插入字符
rchar:替换光标处字符为字符char
cw/ce:替换光标所在处到该单词结尾的字符
o:在下一行新增一行输入字符
O:在上一行新增一行输入字符
x:删除光标处字符
X:删除光标处前一个字符

字符串相关:
:/word 		//向下查找word字符串
:?word		//向上查找word字符串
:%s /abc  /efg /g     			//将所有abc字符串替换为efg字符串

文件操作:
:e <path/to/file>  	//打开文件
:wq/:x/ZZ         	//保存并退出文件
:q!		 	//强制退出不保存文件
:qa!			//强制退出所以正在编辑的文件
:saveas <path/to/file>  //另存为文件

多文件操作:
vim file1 file2 ... filen       //打开所有想要打开的文件
:e file   	//再打开一个文件,并且此时vim里会显示出file文件的内容
:split         //水平切分窗口
:vsplit     //垂直切分窗口

:bn			//下一个文件
:bp			//上一个文件
:ls			//列出打开的文件,带编号
:b1~n		//切换至第n个文件

<C-6>  		//两文件间的切换
<C-w><dir>	//切换到前/下/上/后一个窗格
<C-w>h/j/k/l 	//同上
<C-w>w 		//依次向后切换到下一个窗格中
<C-w>_		//最大化窗口尺寸
<C-v>+/-	//增加/减小窗口尺寸

鼠标位置移动


行内移动:
0:移动到行首
^:移动到本行第一个非blank字符
$:移动到行尾
g_:移动到行尾最后一个非blank字符

[n]h:相对当前位置向左移动n个字符
[n]l:相对当前位置向右移动n个字符

[n]fa:跳到相对想在位置向右的第n个字符为a的地方
[n]ta:跳到相对想在位置向右的第n个字符为a的前一个字符处

页内移动:
[n]j:相对当前位置向下移动到n行
[n]k:相对当前位置向上移动到n行
[n]gg:跳到第n行
[n]G:跳到第n行,G为跳到页末
[n]e:跳到相对想在位置向右的第n个单词的最后一个字符
[n]w:跳到相对想在位置向右的第n个单词的第一个字符
%:匹配括号移动
[n]*:匹配光标当前所在的单词,向下移动光标到第n个匹配单词
[n]#:匹配光标当前所在的单词,向上移动光标到第n个匹配单词

选中括号中的内容

在可视模式下(<ctrl-v>/v)
<ctrl-v>/vi 选中中间的内容,不包括
<ctrl-v>/va 选中中间内容,包括
<ctrl-v>/vi( 选中()中间内容
<ctrl-v>/vi< 选中<>中间内容
<ctrl-v>/vi[ 选中[]中间内容
<ctrl-v>/vit 选中中间的内容
<ctrl-v>/vi” 选中”"中间内容
<ctrl-v>/vi’ 选中”中间的内容
<ctrl-v>/vis 选中一个句子
<ctrl-v>/vib 选中一个block
<ctrl-v>/viw选中一个单词
<ctrl-v>/vip 选中一个段落

快捷操作

1.多字符操作:
<start position><command><end position>
例:
0y$:将本行第一个到最后一个字符复制下来
0gU$:将本好第一个到最后一个字符变为大写
0gu$:将本好第一个到最后一个字符变为小写

2.区域选择:
<action>a<object> 或 <action>i<object>
例:假设你有一个字符串 (map (+) ("foo")).而光标键在第一个 o 的位置。(借用陈皓的例子,我也曾经学习
他的《VIM简明教程》和《跟我一起写makefile》,很赞的牛人,这是他的博客,http://coolshell.cn,有时
间就去溜溜呗!)
vi":选择""之间的foo,不包括""
va":选择""之间的foo,包括""
vi):会选择 "foo"
va):会选择("foo")
v2i):会选择 map (+) ("foo")
v2a):会选择 (map (+) ("foo"))

3.块操作:
[0/^]<C-v><dir><operation><ESC>
例:选择3行代码块的每行末尾添加字符串"feison"
0<C-v>2j$Afeison<ESC>
选择3行代码块的每行行首插入字符串"--"
0<C-v>2jI--<ESC>
注:
特殊<operation>
	1.>向右缩进
	2.<向左缩进
	3.=自动缩进
	4.J把所有行连接成一行
	
4.宏录制:
qa <operation list> q @a/[n]@@
qa:开启宏录制并将操作记录到寄存器a
<operation list>:操作序列
q:退出宏录制
@a:按录制的宏a操作一次
例:qypq:复制当前行并粘贴
@a:执行该动作一次
10@@:执行该动作10次

5.自动提示:
<C-n>/<C-p>

6.执行外部shell命令:
:!<cmd>

7.自增自减:
<C-a>:自加1
num+<C-a>:自加num
<C-x>:自减1
num+<C-x>:自减num

寄存器操作

1.官方帮助手册
:h registers
2.寄存器分类
2.1.无名(unnamed)寄存器:"",缓存最后一次操作内容;
2.2.数字(numbered)寄存器:"0 ~ "9,缓存最近操作内容,复制与删除有别, "0寄存器缓存最近一次复制的内容,"1-"9缓存最近9次删除内容
2.3.行内删除(small delete)寄存器:"-,缓存行内删除内容;
2.4.具名(named)寄存器:"a ~ "z或"A - "0Z,指定时可用;
2.5.只读(read-only)寄存器:":, "., "%, "#,分别缓存最近命令、最近插入文本、当前文件名、当前交替文件名;
2.6.表达式(expression)寄存器:"=,只读,用于执行表达式命令;
2.7.选择及拖拽(selection and drop)寄存器:"*, "+, "~,存取GUI选择文本,可用于与外部应用交互,使用前提为系统剪切板(clipboard)可用;
2.8.黑洞(black hole)寄存器:"_,不缓存操作内容(干净删除);
2.9.模式寄存器(last search pattern):"/,缓存最近的搜索模式。

3.查看寄存器内容
:reg         查看所有寄存器内容
:reg 寄存器名  查看单个寄存器内容

4.寄存器操作:
normal模式下,"<reg>[y/p]表示复制内容到寄存器,粘贴寄存器内容指定位置
从vim内容与外部内容之间的拷贝:"+y(+寄存器是外部和vim通用寄存器)

在无clipboard的vim使用系统剪切板

无clipboard的vim使用场景很多,最常见的就是ssh+vim,这是使用系统剪切板的方法有两种:
1.shift+左键选择;
2.关闭鼠标支持set mouse=a 选项;

1.4 gvim使用

关闭windows下的预设mapping:
:e $MYVIMRC<enter> //或直接编辑_vimrc文件
set nocompatible
source $VIMRUNTIME/vimrc_example.vim
"source $VIMRUNTIME/mswin.vim "注释这两行
"behave mswin

1.5 vim常用命令示意图

2 SpaceVim c/c++ IDE搭建

2.1 安装

sudo apt update
sudo apt install cmake curl git
curl -sLf https://spacevim.org/cn/install.sh | bash
curl -sL install-node.now.sh/lts > nodejs-install.sh
bash nodejs-install.sh -P /home/zhanglei/usr/

2.2常用快捷键

常用编辑器窗口

按键功能描述
<F2>打开、关闭语法树
<F3>打开、关闭文件树
SPC c l注释/反注释当前行
SPC c L注释当前行
SPC c u反注释当前行
SPC c p注释/反注释段落

2.3 插件安装

2.4 配置文件

~/.SpaceVim.d/init.toml

#=============================================================================
# dark_powered.toml --- dark powered configuration example for SpaceVim
# Copyright (c) 2016-2020 Wang Shidong & Contributors
# Author: Wang Shidong < wsdjeg at 163.com >
# URL: https://spacevim.org
# License: GPLv3
#=============================================================================

# All SpaceVim option below [option] section
[options]
    # set spacevim theme. by default colorscheme layer is not loaded,
    # if you want to use more colorscheme, please load the colorscheme
    # layer
    colorscheme = "OceanicNext"
    colorscheme_bg = "dark"
    # Disable guicolors in basic mode, many terminal do not support 24bit
    # true colors
    enable_guicolors = true
    # Disable statusline separator, if you want to use other value, please
    # install nerd fonts
    statusline_separator = "arrow"
    statusline_inactive_separator = "arrow"
    buffer_index_type = 4
    default_indent = 4
    enable_tabline_filetype_icon = true
    enable_statusline_mode = false
        bootstrap_before = "feisonspacevim#before"
    bootstrap_after = "feisonspacevim#after"
    vimcompatible = true
    autocomplete_method = "coc"


# Enable autocomplete layer
[[layers]]
name = 'autocomplete'
auto_completion_return_key_behavior = "complete"
auto_completion_tab_key_behavior = "smart"

[[layers]]
name = 'shell'
default_position = 'top'
default_height = 30

[[layers]]
name = 'lang#c'
enable_clang_syntax_highlight = true
clang_executable = "/home/zhanglei/usr/bin/clang"
libclang_path = "/home/zhanglei/usr/lib/"

[[layers]]
  name = "lsp"
  filetypes = [
    "c",
    "cpp"
  ]
[layers.override_cmd]
  c = ["clangd"]

[[layers]]
  name = "git"
  git-plugin = "fugitive"

[[custom_plugins]]
  name = "mhartington/oceanic-next"
  merged = 0
# vista.vim 的依赖
[[custom_plugins]]
    name = "majutsushi/tagbar"

# 更加美观的 tagbar
[[custom_plugins]]
    name = 'liuchengxu/vista.vim'

# 基于lsp的高亮插件
[[custom_plugins]]
    name = 'jackguo380/vim-lsp-cxx-highlight'

# 利用 git blame 显示当前行的 commit message
[[custom_plugins]]
    name = 'rhysd/git-messenger.vim'
    lazy =  1
    on_cmd = 'GitMessenger'
    on_map = '<Plug>(git-messenger'


[[layers]]
  name = "tags"

[[layers]]
  name = "gtags"

[[layers]]
name = "fzf"

~/.SpaceVim/coc-settings.json


   "languageserver": 
       "clangd": 
           "command": "clangd",
           "rootPatterns": ["compile_flags.txt", "compile_commands.json"],
           "filetypes": ["c", "cc", "cpp", "c++", "objc", "objcpp"]
       
   


~/.SpaceVim.d/autoload/feisonspacevim.vim

function! feisonspacevim#before() abort
    let g:coc_disable_startup_warning = 1
        #echo "feisonspacevim enter"
endfunction

function! feisonspacevim#after() abort
        #echo "feisonspacevim exit"
endfunction

以上是关于Vim相关的主要内容,如果未能解决你的问题,请参考以下文章

vim编辑器讲解

vim基础命令

VIM操作

QTextEdit如何将当前选定的文本行保持在屏幕上的同一位置

vi-vim :删除撤销恢复删除复制删除

vim进阶命令