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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/228447.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app/vue封装etc车牌照输入,获取键盘按键键值

先看下效果如下&#xff1a; 动态图如下 uniapp的keyup获取不到keyCode和compositionstart&#xff0c;compositionend&#xff0c;所以需要监听input节点的keyup事件&#xff0c; 思路以及代码如下&#xff1a; 1.将每一个字符用文本框输入&#xff0c;代码如下 <view …

CEC2017(Python):粒子群优化算法PSO求解CEC2017(提供Python代码)

一、CEC2017简介 参考文献&#xff1a; [1]Awad, N. H., Ali, M. Z., Liang, J. J., Qu, B. Y., & Suganthan, P. N. (2016). “Problem definitions and evaluation criteria for the CEC2017 special session and competition on single objective real-parameter numer…

NullByte

信息收集 # nmap -sn 192.168.1.0/24 -oN live.nmap Starting Nmap 7.94 ( https://nmap.org ) at 2023-12-29 09:23 CST Nmap scan report for 192.168.1.1 Host is up (0.00038s latency). MAC Address: 00:50:56:C0:00:08 (VMware) Nmap scan report for …

PostgreSQL16.1(Windows版本)

1、卸载原有的PostgreSQL &#xfeff; &#xfeff; 点击Next即可。 &#xfeff;&#xfeff; 点击OK即可。 卸载完成。 2、安装 &#xff08;1&#xff09; 前两部直接Next&#xff0c;第二部可以换成自己想要安装的路径。 &#xff08;2&#xff09; 直接点击Next。…

政务大数据能力平台建设方案:文件全文30页,附下载

关键词&#xff1a;智慧政务解决方案&#xff0c;智慧政务建设&#xff0c;智慧政务服务平台&#xff0c;智慧政务大数据&#xff0c;数字政务一体化平台。大数据&#xff0c;政务大数据建设 一、智慧政务建设需求 1、政务服务需求&#xff1a;智慧政务建设需要满足人民群众的…

C++每日一练(8):图像相似度

题目描述 给出两幅相同大小的黑白图像&#xff08;用0-1矩阵&#xff09;表示&#xff0c;求它们的相似度。 说明&#xff1a;若两幅图像在相同位置上的像素点颜色相同&#xff0c;则称它们在该位置具有相同的像素点。两幅图像的相似度定义为相同像素点数占总像素点数的百分比。…

构建基础wlan网络 hcia无线

实验 旁挂组网 二层网络 ac为 dhcp的服务器给ap地址 s1给sta的ip地址 DHCP 业务为直接转发 实验步骤 第一步 poe 开启 poe en 开启 第二步 有线连接 vlan的配置 s1 vlan batch 100 101 连接的端口 port link-type trunk port trunk allow-pass …

pyDAL一个python的ORM(3)建表与表相关操作

1、建表操作define_table() 我们构建2张表&#xff0c;后面示例使用&#xff1a; db.define_table(person,#表名 Field(id, string),#字段名及字段的数据类型 Field(‘name, string), Field(‘dept, string), ) db.define_table(things, Field(id, string), Field(‘nam…

Docker之镜像上传和下载

目录 1.镜像上传 1) 先上百度搜索阿里云 点击以下图片网站 2) 进行登录/注册 3) 使用支付宝...登录 4) 登录后会跳转到首页->点击控制台 5) 点击左上角的三横杠 6) 搜索容器镜像关键词->点击箭头所指 ​ 编辑 7) 进入之后点击实例列表 8) 点击个人实例进入我们的一个…

win/linux 环境查看动态库包含的函数

我们打包了动态库&#xff0c;还要查看是否包含一些函数&#xff0c;需要导出这些函数 在win 环境下可以使用 .def 格式的文件进行操作 ######################################################### 跳过这一步&#xff0c;回到主题&#xff0c;在两个系统平台如何查看动态库包…

轻量封装WebGPU渲染系统示例<55>- 顶点数据更新

当前示例源码github地址: https://github.com/vilyLei/voxwebgpu/blob/feature/material/src/voxgpu/sample/VertexUpdateTest.ts 当前示例运行效果: ​​​​​​​ 此示例基于此渲染系统实现&#xff0c;当前示例TypeScript源码如下: export class VertexUpdateTest {pr…

2023年成都市中等职业学校学生技能大赛“网络搭建及应用”赛项竞赛样卷

2023年成都市中等职业学校学生技能大赛 “网络搭建及应用”赛项竞赛样卷 &#xff08;总分1000分&#xff09; 目录 2023年成都市中等职业学校学生技能大赛 “网络搭建及应用”赛项竞赛样卷 网络建设与调试项目&#xff08;500分&#xff09; 服务器搭建与运维项目&#xff08;…

【PXIE301-208】基于PXIE总线架构的Serial RapidIO总线通讯协议仿真卡

板卡概述 PXIE301-208是一款基于3U PXIE总线架构的Serial RapidIO总线通讯协议仿真卡。该板卡采用Xilinx的高性能Kintex系列FPGA作为主处理器&#xff0c;实现各个接口之间的数据互联、处理以及实时信号处理。板卡支持4路SFP光纤接口&#xff0c;支持一个PCIe x8主机接口&…

Ubuntu中fdisk磁盘分区并挂载、扩容逻辑卷

Ubuntu中fdisk磁盘分区并挂载、扩容逻辑卷 一&#xff1a;fdisk磁盘分区并挂载1.查看磁盘分区信息2.分区3.强制系统重新读取分区(避免重启系统)4.格式化分区5.创建挂载目录6.设置开机自动挂载&#xff1a;7.验证并自动挂载(执行了该命令不需要重启系统)8.查看挂载007.异常情况处…

[DL]深度学习_AlexNet

AlexNet网络详解 目录 一、AlexNet 1、详细介绍 2、网络框架 二、网络详解 1、首次使用ReLu激活函数 2、模型基本结构与双GPU实现 3、局部响应归一化(LRN) 4、重叠池化(Overlapping Pooling) 5、数据增强 6、Dropout 一、AlexNet 1、详细介绍 AlexNet是一种经典的卷积…

【深入浅出RocketMQ原理及实战】「云原生升级系列」打造新一代云原生“消息、事件、流“统一消息引擎的融合处理平台

打造新一代云原生"消息、事件、流"统一消息引擎的融合处理平台 云原生架构RocketMQ的云原生架构实现RocketMQ的云原生发展历程互联网时期的诞生无法支持云原生的能力 云原生阶段的升级云原生升级方向促进了Mesh以及多语言化发展可分合化的存算分离架构存储分离架构的…

RabbitMQ核心概念记录

本文来记录下RabbitMQ核心概念 文章目录 什么叫消息队列为何用消息队列RabbitMQ简介RabbitMQ基本概念RabbitMQ 特点具体特点包括 Rabbitmq的工作过程RabbitMQ集群RabbitMQ 的集群节点包括Rabbit 模式大概分为以下三种单一模式普通模式镜像模式 本文小结 什么叫消息队列 消息&am…

前后端分离架构的特点以及优缺点

文章目录 一、前后端不分离架构(传统单体结构)1.1 什么是前后端不分离1.2 工作原理1.3 前后端不分离的优缺点1.4 应用场景 二、前后端分离架构2.1 为什么要前后端分离2.2 什么是前后端分离2.3 工作原理2.4 前后端分离的优缺点 参考资料 一、前后端不分离架构(传统单体结构) 首…

虚拟专线网络(IP-VPN)

虚拟专线网络(IP-VPN)&#xff0c;因为它的安全性和可靠性。通过亚洲领先的 IP VPN 提供商。享受更高的可管理性和可扩展性&#xff0c;在多个站点之间交付 IP 流量或数据包&#xff0c;拥有亚太地区最大的 IP 骨干网。 1&#xff0c;保证正常运行时间&#xff0c;在网络链路发…

【兔子王赠书第14期】《YOLO目标检测》涵盖众多目标检测框架,附赠源代码和全书彩图!

文章目录 写在前面YOLO目标检测推荐图书本书特色内容简介作者简介 推荐理由粉丝福利写在后面 写在前面 小伙伴们好久不见吖&#xff0c;本期博主给大家推荐一本关于YOLO目标检测的图书&#xff0c;该书侧重目标检测的基础知识&#xff0c;包含丰富的实践内容&#xff0c;是目标…