Linux编辑器——vim的使用
- 一、什么是集成开发环境?
- 二、什么是vim?
- 三、vim的概念
- 四、vim的基本操作
- 五、vim命令模式命令集
- 5.1 移动光标
- 5.2 删除文字
- 5.3 复制粘贴
- 5.4 其他操作
- 六、vim底行模式命令集
- 6.1 首先在命令模式下shift+;进入末行模式。
- 6.2 进行多文本编辑
- 6.3 vim的分屏模式
- 七、简单vim配置
一、什么是集成开发环境?
如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 atom29 " colorscheme molokai30 colorscheme luna-term31 32 " 以下为 gruvbox 主题专用 33 " colorscheme gruvbox34 " let g:gruvbox_contrast_light="light" 35 " let g:gruvbox_contrast_dark="hard"36 " let g:gruvbox_improved_warnings=137 38 39 """""""""""""""""""""""""" 零碎配置40 set hlsearch41 let mapleader = ";" 42 set nu43 behave mswin44 syntax on45 set si46 set ai 47 set nowritebackup48 set backspace=indent,eol,start49 set expandtab50 set tabstop=251 set softtabstop=252 set shiftwidth=253 set fileencodings=utf-8,gbk,cp936,cp950,latin154 set encoding=utf-855 set ruler56 set showcmd57 set incsearch58 set ruler59 set foldmethod=marker60 filetype plugin on61 " 不吱吱叫62 set noeb vb t_vb=63 set cursorline64 " 文件修改之后自动载入65 set autoread66 " 在上下移动光标时,光标的上方或下方至少会保留显示的行数67 set scrolloff=568 " 左下角不显示当前vim模式69 set noshowmode70 71 if has("autocmd")72 au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif 73 endif74 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=cn87 set ambiwidth=double88 let g:airline_powerline_fonts = 189 let g:airline#extensions#tabline#enabled = 190 let g:airline#extensions#tabline#buffer_nr_show = 191 " 关闭状态显示空白符号计数92 let g:airline#extensions#whitespace#enabled = 093 let g:airline#extensions#whitespace#symbol = '!'94 " 设置consolas字体95 set guifont=Consolas\ for\ Powerline\ FixedD:h1196 if !exists('g:airline_symbols')97 let g:airline_symbols = {}98 endif99 " 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 = 'Þ'
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