[Linux开发工具]——vim使用

发布时间:2024年01月01日

一、什么是集成开发环境?

如vs:

就是整个开发的生命周期,建立项目,写代码,编写代码,编译代码,调试代码,发布项目,这种环境集就是集成开发环境(编写、编译、运行、调试,为一体)。

Linux中指令级别操作:

在linux当中,它的一个一个工具都是各自独立得。
编写代码:vim
编译代码:gcc / g++
调试代码:gdb
维护项目结构自动化编译:make / makefile

二、什么是vim?

vim是一款多模式的编辑器。 vim的前身是vi,vim是vi的升级版本,vim兼容vi中大多数指令集,并且vim还有一些新的特性在里面。
例如:语法高亮,可视化操作不仅可以在终端运行,也可以运行于x window,mac os,windows。

三、vim的概念

vim有很多模式,初学者只需要掌握三个就可以:
正常/普通/命令模式(Normal mode)

控制屏幕光标的移动,字符、字或行的删除,移动复制某区段及进入Insert mode下,或者到 last line mode。

插入模式(Insert mode)

只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。该模式是我们后面用的最频繁的编辑模式。

末行模式(last line mode)

文件保存或退出,也可以进行文件替换,找字符串,列出行号等操作。 在命令模式下,shift+:即可进入该模式。要查看你的所有模式:打开vim,底行模式直接输入
:help vim-modes

一共12种模式:six BASIC modes和six ADDIYIONAL modes
打开、关闭、查看、查询、插入、删除、替换、撤销、复制等操作。

补充:vim编写代码,异常退出,或者系统崩溃等问题时,当我们再次打开那个文件,该文件内容就变了。因为我们不正常退出时,vim会将我们上次编写的代码保存在了一个.与原文件同名的.swp的隐藏文件里。
1.可以输入R命令(恢复),也可以输入D命令(删除,删除异常情况下的临时文件)
2.输入:

ls -al 把swp文件删掉

四、vim的基本操作

三种常用模式之间的关系:
在这里插入图片描述

vim中的模式很多,当使用者不知道当前所处的模式是处于一种什么样的状态,万能的Esc键,可以将使用者带回命令模式,该模式也可以认为其他任意模式的入口。

打开vim
该目录下如果有test.c文件就会直接打开test.c,没有就会创建一个test.c文件然后打开

vim test.c

在这里插入图片描述
打开后就是命令模式:
在这里插入图片描述
命令模式下按a/i/o就是插入模式:
在这里插入图片描述
命令模式下按shift+;就是底行模式:
在这里插入图片描述
底行模式按

w(保存当前文件)
wq(存盘,并且退出)
q!(不存盘,强制退出vim)

插入模式:

i, I 进入输入模式(Insert mode):
i 为【从目前光标所在处输入】, I 为【在目前所在行的第一个非空格符处开始输入】。
a, A 进入输入模式(Insert mode):
a 为【从目前光标所在的下一个字符处开始输入】, A 为【从光标所在行的最后一个字符处开始输入】。
o, O 进入输入模式(Insert mode):
这是英文字母 o 的大小写。o 为【在目前光标所在的下一行处输入新的一行】; O 为在目前光标所在处的上一行输入新的一行!

五、vim命令模式命令集

5.1 移动光标

在命令模式下,对光标进行上下左右移动,这里指代都是小写:上移k,下移j,左移h,右移l,都是移动一格。 当然我们也可以使用键盘右侧的上下左右,但是键盘离手就慢了,字母移动的光标可能对我们操作更加方便。

  行内移动
  	左移一个字符:h 
  	右移一个字符:l
  	移动到下一个单词的开头:w
  	移动到上一个单词的开头:b
  	移动到当前单词的结尾:e
  	移动到行首:shift+^
  	移动到行尾:shift+$
  	替换模式:shift+r

  跨行移动
  	下移一行:j
  	上移一行:k
	移动到文件末尾:G
	移动到文件开头:gg
  	移动到第n行:nG
  	移动到屏幕顶部:H
  	移动到屏幕中间:M
  	移动到屏幕底部:L
  	向前翻页:Ctrl+f
  	向后翻页:Ctrl+b
	向前翻半页:Ctrl+u
  	向后翻半页:Ctrl+d
  查找移动 
  	查找word
  	并移动到第一个匹配处:/word
  	移动到下一个匹配处:n
  	移动到上一个匹配处:N
  	查找光标所在单词并移动到第一个匹配处:*
  	查找光标所在单词并移动到上一个匹配处:#
  	查找匹配的括号并移动到对应位置:%

高亮要查找的函数名:shift+3=#,按n的意思是下一个查找到的函数/字符串名

5.2 删除文字

  删除文字
  	每按一次删除光标所在位置的一个字符:x
  	指定删除所在位置后面(包括自己在内的)#个字符 : #x
  	大写的X,每按一次可以删除光标所在位置前面的一个字符:X
  	#X表示删除光标所在的位置前面的#个字符:#X
  	删除光标所在行:dd
  	从光标所在位置,向后面删除#行:#dd

5.3 复制粘贴

  将光标所在之处到字尾的字符复制到缓冲区:yw
  复制#个字符到缓冲区:#yw
  复制光标所在行到缓冲区:yy
  拷贝从光标所在行往下数#行文字:#yy
  粘贴缓冲区内容到光标所在行:p

5.4 其他操作

  替换
  	替换光标所在位置的字符:r
  	替换光标所在之处的字符,知道按下ESC键停止:R
  撤销上一次操作
  	如果您误执行一个命令,可以马上按下u撤销上一个操作,多次按u可以多次撤销:u
  	撤销的恢复,对于错误撤销可以执行对撤销操作的撤销:crtl+r
  更改
  	更改光标所在处的字到字尾处:cw
  	表示可以更改光标所在位往后的#个字符:c#w
  跳至到指定的行
  	列举处光标所在行的行号:crtl+g
  	移动光标至文章的第#行的行首:#G

六、vim底行模式命令集

6.1 首先在命令模式下shift+;进入末行模式。

  保存并退出vim
  	保存文件:w
  	退出 Vim 编辑器:q
  	保存文件并退出 Vim 编辑器:wq
  	强制退出 Vim 编辑器,不保存修改:q!
  列出行号
  	显示行号:set nu
  	隐藏行号:set nonu
  搜索相关字符关键字
  	向下搜索 word 这个字符串:/word
  	向上搜索 word 这个字符串:?word
  	重复上一次的搜索 :n
  修改字符内容
  	替换当前行第一个 old 为 new :s/old/new
  	替换当前行所有的 old 为 new :s/old/new/g
  	替换整个文件中所有的 old 为 new :%s/old/new/g

在这里输入指令需要注意的是:%s///g第一个/后面输入的是想要修改的字符,第二个/后面输入的是新的字符

6.2 进行多文本编辑

进入底行模式shift + ;,输入vs后面加想要打开的文件名称

注意:vs后跟的文件名在该目录下不存在,vim会默认帮你创建该文件,该文件若是没有进行内容编写保存,文件会销毁
如果你的电脑屏幕足够大,可以创建多个文件进行编辑。
在vim进行多个文件编辑的时候,底行模式退回命令模式输入Ctrl + ww可以进行文件之间进行切换,通过光标所在的位置来判断你所在文件的位置。
保存退出的时候,退出的是光标所在的文件,并不会说一下子退出vim,直到退出最后一个文件才会真正退出vim

6.3 vim的分屏模式

先要进入底行模式才能输入分屏命令

sp:水平分屏
vsp:垂直分屏
ctrl+ww:多屏之间切换
qall:退出所有屏,以此内推有:wall、wqall
vim -o aa.txt bb.txt:进入的时候就进行分屏(o水平;O垂直)

补充
批量化注释:
1,ctrl+v
2.hjkl区域选择,j
3.shift+i=l
4.//
5. Esc
批量化去注释:
1.ctrl+v
2…hjkl区域选择
3.d

七、简单vim配置

vim在启动文件的时候会读取当前用户工作目录下的特定的配置文件

cd ~(进入自己账号的家目录)
ls -al(查看是否有配置文件.vimrc,没有就新建touch .vimrc)

因为我的是配置好得,是一个软连接文件
在这里插入图片描述

打开.vimrc,就可以在里面配置各自效果

配置是个体力活,为了不这么麻烦,我教大家一种方法:
该方法目前只支持 Centos7 x86_64.

安装方法:

在 shell 中执行指令(想在哪个用户下让vim配置生效, 就在哪个用户下执行这个指令. 强烈 “不推荐” 直接在 root 下执行):

curl -sLf https://gitee.com/HGtz2222/VimForCpp/raw/master/install.sh -o ./install.sh && bash ./install.sh

需要按照提示输入 root 密码. 您的 root 密码不会被上传, 请放心输入.
注意:curl指令需要安装(sudo yum install curl)

卸载方法:

在安装了 VimForCpp 的用户下执行:

bash ~/.VimForCpp/uninstall.sh

打开.vimrc,看看里面的配置

"""""""""""""""""""""""""" vim-plug 插件管理器
  2 " PlugInstall 安装插件
  3 " PlugUpgrade 更新 vim-plug 自身
  4 call plug#begin('~/.vim/bundle')
  5 Plug 'Valloric/YouCompleteMe'
  6 Plug 'bling/vim-airline'
  7 Plug 'vim-airline/vim-airline-themes'
  8 Plug 'morhetz/gruvbox'
  9 Plug 'octol/vim-cpp-enhanced-highlight'
 10 Plug 'SirVer/ultisnips'
 11 Plug 'tpope/vim-surround'
 12 Plug 'flazz/vim-colorschemes'
 13 Plug 'scrooloose/nerdtree'
 14 Plug 'python-mode/python-mode'
 15 Plug 'scrooloose/nerdcommenter'
 16 Plug 'Yggdroot/LeaderF'
 17 Plug 'cpiger/NeoDebug'
 18 Plug 'ryanoasis/vim-devicons'
 19 Plug 'autozimu/LanguageClient-neovim', {
 20     \ 'branch': 'next',
 21     \ 'do': 'bash install.sh',
 22     \ }
 23 Plug 'fatih/vim-go'
 24 call plug#end()
 25 
 26 
 27 """""""""""""""""""""""""" 主题
 28 " colorscheme atom
 29 " colorscheme molokai
 30 colorscheme luna-term
 31 
 32 " 以下为 gruvbox 主题专用 
 33 " colorscheme gruvbox
 34 " let g:gruvbox_contrast_light="light"                                                                                                                                                 
 35 " let g:gruvbox_contrast_dark="hard"
 36 " let g:gruvbox_improved_warnings=1
 37 
 38 
 39 """""""""""""""""""""""""" 零碎配置
 40 set hlsearch
 41 let mapleader = ";" 
 42 set nu
 43 behave mswin
 44 syntax on
 45 set si
 46 set ai                                                                                                                                                                                 
 47 set nowritebackup
 48 set backspace=indent,eol,start
 49 set expandtab
 50 set tabstop=2
 51 set softtabstop=2
 52 set shiftwidth=2
 53 set fileencodings=utf-8,gbk,cp936,cp950,latin1
 54 set encoding=utf-8
 55 set ruler
 56 set showcmd
 57 set incsearch
 58 set ruler
 59 set foldmethod=marker
 60 filetype plugin on
 61 " 不吱吱叫
 62 set noeb vb t_vb=
 63 set cursorline
 64 " 文件修改之后自动载入
 65 set autoread
 66 " 在上下移动光标时,光标的上方或下方至少会保留显示的行数
 67 set scrolloff=5
 68 " 左下角不显示当前vim模式
 69 set noshowmode
 70 
 71 if has("autocmd")
 72   au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif                                                                                         
 73 endif
 74 
 75 
 76 """""""""""""""""""""""""" airline 彩色状态栏/标签页
 77 " 这几个是挑选的还不错的几个 airline 主题
 78 " let g:airline_theme="ravenpower"
 79 " let g:airline_theme="minimalist"
 80 " let g:airline_theme="kolor"
 81 " let g:airline_theme="jellybeans"
 82 " let g:airline_theme="distinguished"
 83 " let g:airline_theme="base16_google"
 84 let g:airline_theme="behelit"
 85 
 86 set helplang=cn
 87 set ambiwidth=double
 88 let g:airline_powerline_fonts = 1
 89 let g:airline#extensions#tabline#enabled = 1
 90 let g:airline#extensions#tabline#buffer_nr_show = 1
 91 " 关闭状态显示空白符号计数
 92 let g:airline#extensions#whitespace#enabled = 0
 93 let g:airline#extensions#whitespace#symbol = '!'
 94 " 设置consolas字体
 95 set guifont=Consolas\ for\ Powerline\ FixedD:h11
 96 if !exists('g:airline_symbols')
 97   let g:airline_symbols = {}
 98 endif
 99 " unicode symbols
100 let g:airline_left_sep = '?'
101 let g:airline_left_sep = '?'
102 let g:airline_right_sep = '?'
103 let g:airline_right_sep = '?'
104 let g:airline_symbols.crypt = '🔒'
105 let g:airline_symbols.linenr = '?'                                                                                                                                                     
106 let g:airline_symbols.linenr = '?'
107 let g:airline_symbols.linenr = ''
108 let g:airline_symbols.linenr = '?'
109 let g:airline_symbols.maxlinenr = ''
110 let g:airline_symbols.maxlinenr = '㏑'
111 let g:airline_symbols.branch = '?'
112 let g:airline_symbols.paste = 'ρ'
113 let g:airline_symbols.paste = 'T'
114 let g:airline_symbols.paste = '∥'
115 let g:airline_symbols.spell = '?'
116 let g:airline_symbols.notexists = '?'
117 let g:airline_symbols.whitespace = 'Ξ'
118 
119 " powerline symbols
120 let g:airline_left_sep = ''
121 let g:airline_left_alt_sep = ''
122 let g:airline_right_sep = ''
123 let g:airline_right_alt_sep = ''
124 let g:airline_symbols.branch = ''
125 let g:airline_symbols.readonly = ''
126 let g:airline_symbols.linenr = '?'
127 " let g:airline_symbols.maxlinenr = ''
128 let g:airline_symbols.maxlinenr = ''
129 
130 " old vim-powerline symbols
131 let g:airline_left_sep = '?'
132 let g:airline_left_alt_sep = '?'
133 let g:airline_right_sep = '?'
134 let g:airline_right_alt_sep = '?'
135 let g:airline_symbols.branch = '?'
136 let g:airline_symbols.readonly = '?'
137 " let g:airline_symbols.linenr = '?'
138 let g:airline_symbols.linenr = ''
139 
140 
141 """""""""""""""""""""""""" 代码折叠
142 set foldenable
143 " 折叠方法
144 " manual    手工折叠
145 " indent    使用缩进表示折叠
146 " expr      使用表达式定义折叠
147 " syntax    使用语法定义折叠
148 " diff      对没有更改的文本进行折叠
149 " marker    使用标记进行折叠, 默认标记是 {{{}}}
150 set foldmethod=indent
151 set foldlevel=99
152 " 代码折叠自定义快捷键 zz
153 let g:FoldMethod = 0
154 fun! ToggleFold()
155     if g:FoldMethod == 0
156         exe "normal! zM"
157         let g:FoldMethod = 1
158     else
159         exe "normal! zR"
160         let g:FoldMethod = 0
161     endif
162 endfun
163 
164 
165 """""""""""""""""""""""""" 快速运行
166 func! Compile()
167     exec "w"
168     if &filetype == 'c'                                                                                                                                                                
169       exec "!gcc -g % -o %< && ./%<"
170     elseif &filetype == 'cpp'
171       exec "!g++ -g % -o %< && ./%<"
172     elseif &filetype == 'cc'
173       exec "!g++ -g % -o %< && ./%<"
174     elseif &filetype == 'python'
175       exec "!python %"
176     elseif &filetype == 'sh'
177       exec "!sh %"
178     endif
179 endfunc
180 
181 
182 """""""""""""""""""""""""" YouCompleteMe
183 set completeopt=longest,menu
184 autocmd InsertLeave * if pumvisible() == 0|pclose|endif
185 inoremap <expr> <CR> pumvisible() ? "\<C-y>" : "\<CR>"
186 
187 let g:ycm_global_ycm_extra_conf = '~/.ycm_extra_conf.py'
188 let g:ycm_confirm_extra_conf = 0
189 "let g:ycm_key_invoke_completion='<C-j>'
190 let g:ycm_error_symbol = 'E>'
191 let g:ycm_warning_symbol = 'W>'
192 " 使用 NerdFont 中的图标表示错误和警告
193 " let g:ycm_error_symbol = '?'
194 " let g:ycm_warning_symbol = '卵'
195 let g:ycm_enable_diagnostic_signs = 1
196 let g:ycm_enable_diagnostic_highlighting = 1
197 let g:ycm_collect_identifiers_from_comments_and_strings = 0
198 let g:ycm_complete_in_comments = 1
199 let g:ycm_complete_in_strings = 1
200 let g:ycm_min_num_of_chars_for_completion = 2
201 let g:ycm_python_binary_path = 'python'
202 let g:ycm_semantic_triggers =  {
203       \ 'c,cpp,python,java,go,erlang,perl': ['re!\w{2}'],
204       \ 'cs,lua,javascript': ['re!\w{2}'],                                                                                                                                             
205       \}
206 
207 
208 """""""""""""""""""""""""" Tagbar(函数列表)
209 let g:tagbar_ctags_bin='/usr/bin/ctags'
210 let g:tagbar_width=20
211 let g:tagbar_left=1
212 let g:tagbar_sort = 0
213 
214 
215 """""""""""""""""""""""""" NERDTree(文件列表)
216 let g:NERDTreeWinPos="right"
217 let g:NERDTreeWinSize=20
218 
219 
220 """""""""""""""""""""""""" CtrlP(快速查找文件)
221 " let g:ctrlp_working_path_mode='a'
222 
223 
224 """""""""""""""""""""""""" cpp-enhanced-highlight(c++ 语法高亮)
225 " 高亮类,成员函数,标准库和模板
226 let g:cpp_class_scope_highlight = 1
227 let g:cpp_member_variable_highlight = 1
228 let g:cpp_concepts_highlight = 1
229 let g:cpp_experimental_simple_template_highlight = 1
230 " 文件较大时使用下面的设置高亮模板速度较快,但会有一些小错误
231 let g:cpp_experimental_template_highlight = 1
232 
233 
234 """""""""""""""""""""""""" UltiSnips(代码模板)
235 let g:UltiSnipsExpandTrigger="<C-j>"
236 let g:UltiSnipsListSnippets="<C-e>"
237 let g:UltiSnipsJumpForwardTrigger="<C-j>"                                                                                                                                              
238 let g:UltiSnipsJumpBackwardTrgger="<C-k>"
239 
240 
241 """""""""""""""""""""""""" LeaderF
242 let g:Lf_WindowHeight = 0.30
243 
244 
245 """""""""""""""""""""""""" cquery
246 let g:LanguageClient_serverCommands = {
247   \ 'cpp': ['~/.VimForCpp/cquery/bin/cquery', '--log-file=/tmp/cquery/cq.log'],
248   \ 'cxx': ['~/.VimForCpp/cquery/bin/cquery', '--log-file=/tmp/cquery/cq.log'],
249   \ 'hpp': ['~/.VimForCpp/cquery/bin/cquery', '--log-file=/tmp/cquery/cq.log'],
250   \ 'cc': ['~/.VimForCpp/cquery/bin/cquery', '--log-file=/tmp/cquery/cq.log'],
251   \ 'c': ['~/.VimForCpp/cquery/bin/cquery', '--log-file=/tmp/cquery/cq.log'],
252   \ 'h': ['~/.VimForCpp/cquery/bin/cquery', '--log-file=/tmp/cquery/cq.log'],
253 \ }
254 
255 let g:LanguageClient_loadSettings = 1
256 let g:LanguageClient_settingsPath = '/tmp/cquery/settings.json'
257 
258 " 关闭 cquery 的诊断信息, 使用 Ycm 的足矣
259 let g:LanguageClient_diagnosticsEnable=0
260 
261 " 指定项目的根目录标记.
262 let g:LanguageClient_rootMarkers = ['.root', '.svn', '.git']
263 
264 
265 """"""""""""""""""""""" PyMode
266 let g:pymode_lint_cwindow = 0
267 let g:pymode_lint_ignore = ["E305", "E501", "E302", "E391", "W391", "W605",]
268 
269 
270 """"""""""""""""""""""" 按键映射和快捷键提示
271 " 跳转到定义
272 nnoremap <c-k> :YcmCompleter GoToDefinitionElseDeclaration<CR>
273 " 返回到跳转前的位置                                                                                                                                                                   
274 nnoremap <c-l> <c-o>
275 
276 " 切换鼠标状态
277 function! MouseToggle()
278   if &mouse ==# ""
279     set mouse=a 
280   else 
281     set mouse=
282   endif
283 endfunction
284 
285 " 切换绝对行号和相对行号
286 function! NumToggle()
287   if &relativenumber ==# "norelativenumber"
288     set relativenumber
289   else
290     set norelativenumber
291   endif
292 endfunction
293 
294 function GuideEsc()
295   unmap a
296   unmap s
297   unmap d
298   unmap f
299   unmap g
300   unmap w
301   unmap q
302   unmap <esc>
303   echo ""
304 endfunction
305 function Terminal()
306   sp
307   terminal
308 endfunction
309                                                                                                                                                                                        
310 function MenuA()
311   echo "[a] 跳转定义  [s] 查找引用  [d] 重命名  [f] 修正错误  [g] 函数签名  [q] 取消"
312   nnoremap <silent><nowait> a :call GuideEsc()<cr>:call LanguageClient_textDocument_definition()<CR>
313   nnoremap <silent><nowait> s :call GuideEsc()<cr>:call LanguageClient_textDocument_references()<CR>:lopen<CR>:lopen<CR>
314   nnoremap <silent><nowait> d :call GuideEsc()<cr>:call LanguageClient_textDocument_rename()<CR>
315   nnoremap <silent><nowait> f :call GuideEsc()<cr>:YcmCompleter FixIt<CR>
316   nnoremap <silent><nowait> g :call GuideEsc()<cr>:call LanguageClient_textDocument_hover()<CR>
317   nnoremap <silent><nowait> w <nop>
318   nnoremap <silent><nowait> q :call GuideEsc()<cr>
319   nnoremap <silent><nowait> <esc> :call GuideEsc()<cr>
320 endfunction
321 
322 function MenuS()
323   echo "[a] 查找函数  [s] 打开文件  [d] buffer查找   [f] 最近文件   [q] 取消"
324   nnoremap <silent><nowait> a :call GuideEsc()<cr>:LeaderfFunction<cr>
325   nnoremap <silent><nowait> s :call GuideEsc()<cr>:LeaderfFile<cr>
326   nnoremap <silent><nowait> d :call GuideEsc()<cr>:LeaderfBuffer<cr>
327   nnoremap <silent><nowait> f :call GuideEsc()<cr>:LeaderfMru<cr>
328   nnoremap <silent><nowait> g <nop>
329   nnoremap <silent><nowait> w <nop>
330   nnoremap <silent><nowait> q :call GuideEsc()<cr>
331   nnoremap <silent><nowait> <esc> :call GuideEsc()<cr>
332 endfunction
333 
334 function MenuD()
335   echo "[a] 编译运行  [s] 编译检查  [q] 取消"
336   nnoremap <silent><nowait> a :call GuideEsc()<cr>:call Compile()<cr>
337   nnoremap <silent><nowait> s :call GuideEsc()<cr>:YcmDiags<CR>
338   nnoremap <silent><nowait> d <nop>
339   nnoremap <silent><nowait> f <nop>
340   nnoremap <silent><nowait> g <nop>
341   nnoremap <silent><nowait> w <nop>
342 endfunction
343 
344 function MenuF()
345   echo "[a] 函数列表  [s] 文件列表  [d] .h/.c  [f] 标签页  [q] 取消"
346   nnoremap <silent><nowait> a :call GuideEsc()<cr>:TagbarToggle<cr>
347   nnoremap <silent><nowait> s :call GuideEsc()<cr>:NERDTreeToggle<cr>
348   nnoremap <silent><nowait> d :call GuideEsc()<cr>:AT<cr>
349   nnoremap <nowait> f :call GuideEsc()<cr>:tabe 
350   nnoremap <silent><nowait> g <nop>
351   nnoremap <silent><nowait> w <nop>
352   nnoremap <silent><nowait> q :call GuideEsc()<cr>
353   nnoremap <silent><nowait> <esc> :call GuideEsc()<cr>
354 endfunction
355 
356 function MenuWA()
357   echo "[a] 切换鼠标  [s] 切换粘贴  [d] 切换行号  [f] 不可见字符  [q] 取消"
358   nnoremap <silent><nowait> a :call GuideEsc()<cr>:call MouseToggle()<cr>
359   nnoremap <silent><nowait> s :call GuideEsc()<cr>:set paste!<cr>
360   nnoremap <silent><nowait> d :call GuideEsc()<cr>:call NumToggle()<cr>
361   nnoremap <silent><nowait> f :call GuideEsc()<cr>:set list!<cr>
362   nnoremap <silent><nowait> g <nop>
363   nnoremap <silent><nowait> w <nop>
364   nnoremap <silent><nowait> q :call GuideEsc()<cr>
365   nnoremap <silent><nowait> <esc> :call GuideEsc()<cr>
366 endfunction
367 
368 function MenuWS()
369   echo "[a] 文档注释  [s] 折叠/展开  [q] 取消"
370   nnoremap <silent><nowait> a :call GuideEsc()<cr>:Dox<cr><esc>
371   nnoremap <silent><nowait> s :call GuideEsc()<cr>:call ToggleFold()<cr>
372   nnoremap <silent><nowait> d <nop>
373   nnoremap <silent><nowait> f <nop>
374   nnoremap <silent><nowait> g <nop>
375   nnoremap <silent><nowait> w <nop>
376   nnoremap <silent><nowait> q :call GuideEsc()<cr>
377   nnoremap <silent><nowait> <esc> :call GuideEsc()<cr>
378   " TODO 快速注释和格式整理
379 endfunction
380 
381 function MenuW()                                                                                                                                                                       
382   echo "[a] 切换选项  [s] 代码格式 [q] 取消"
383   nnoremap <silent><nowait> a :call GuideEsc()<cr>:call MenuWA()<cr>
384   nnoremap <silent><nowait> s :call GuideEsc()<cr>:call MenuWS()<cr>
385   nnoremap <silent><nowait> d <nop>
386   nnoremap <silent><nowait> f <nop>
387   nnoremap <silent><nowait> g <nop>
388   nnoremap <silent><nowait> w <nop>
389   nnoremap <silent><nowait> q :call GuideEsc()<cr>
390   nnoremap <silent><nowait> <esc> :call GuideEsc()<cr>
391 endfunction
392 
393 function GuideMapTopMenu()
394   nnoremap <silent><nowait> a :call MenuA()<cr>
395   nnoremap <silent><nowait> s :call MenuS()<cr>
396   nnoremap <silent><nowait> d :call MenuD()<cr>
397   nnoremap <silent><nowait> f :call MenuF()<cr>
398   nnoremap <silent><nowait> t :call Terminal()<cr>
399   nnoremap <silent><nowait> g <nop>
400   nnoremap <silent><nowait> w :call MenuW()<cr>
401   nnoremap <silent><nowait> q :call GuideEsc()<cr>
402   nnoremap <silent><nowait> <esc> :call GuideEsc()<cr>
403 endfunction
404 
405 nnoremap <silent><nowait> <space> :call GuideEntry()<cr>
406 function GuideEntry()
407   " 1. 重新映射相关快捷键到 space
408   call GuideMapTopMenu()
409   " 2. 打印菜单
410   echo "[a] 语义  [s] 查找  [d] 调试  [f] 窗口  [w] 其他  [q] 取消  [t] 终端"
411 endfunction
412 
413 
414 """ 其他                                                                                                                                                                               
415 " 调整窗口移动
416 nnoremap H <C-w>h
417 nnoremap J <C-w>j
418 nnoremap K <C-w>k
419 nnoremap L <C-w>l
420 " 快速保存
421 inoremap jk <esc>:w<cr>
422 nnoremap <esc> :w<cr>
423 inoremap <esc> <esc>:w<cr>
424 " 快速缩进
425 vnoremap < <gv
426 vnoremap > >gv
文章来源:https://blog.csdn.net/plj521/article/details/135228665
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。