当前位置: 首页 > news >正文

[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

相关文章:

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

Linux编辑器——vim的使用 一、什么是集成开发环境&#xff1f;二、什么是vim&#xff1f;三、vim的概念四、vim的基本操作五、vim命令模式命令集5.1 移动光标5.2 删除文字5.3 复制粘贴5.4 其他操作 六、vim底行模式命令集6.1 首先在命令模式下shift&#xff1b;进入末行模式。…...

【教学类-43-11】 20231231 3*3宫格数独提取单元格坐标数字的通用模板(做成2*2=4套、3*2=6套)

背景需求&#xff1a; 1、以前做单元格填充&#xff0c;都是制作N个分开的单元格 &#xff08;表格8&#xff09; 2、这次做五宫格数独的Word模板&#xff0c;我图方便&#xff0c;就只用了一个大表格&#xff0c;第六行第六列隐藏框线&#xff0c;看上去就是分开的&#xff…...

Spring Boot日志:从Logger到@Slf4j的探秘

写在前面 Hello大家好&#xff0c;今日是2024年的第一天&#xff0c;祝大家元旦快乐&#x1f389; 2024第一篇文章从SpringBoot日志开始 文章目录 一、前言二、日志有什么用&#xff1f;三、日志怎么用&#xff1f;四、自定义日志打印&#x1f4ac; 常见日志框架说明4.1 在程序…...

英飞凌TC3xx之一起认识GTM系列(六)如何实现GTM与VADC关联的配置

英飞凌TC3xx之一起认识GTM系列(六)如何实现GTM与VADC关联的配置 1 GTM与ADC的接口2 GTM与VADC的连接2.1 VADC 到 GTM 的连接2.1.1 简要介绍2.1.2 应用举例2.2 EVADC到 GTM的连接2.2.1 应用举例3 总结本文介绍实现GTM与VADC的连接性的相关寄存器配置。 1 GTM与ADC的接口 由英…...

【基础】【Python网络爬虫】【6.数据持久化】Excel、Json、Csv 数据保存(附大量案例代码)(建议收藏)

Python网络爬虫基础 数据持久化&#xff08;数据保存&#xff09;1. Excel创建数据表批量数据写入读取表格数据案例 - 豆瓣保存 Excel案例 - 网易新闻Excel保存 2. Json数据序列化和反序列化中文指定案例 - 豆瓣保存Json案例 - Json保存 3. Csv写入csv列表数据案例 - 豆瓣列表保…...

王道考研计算机网络——应用层

如何为用户提供服务&#xff1f; CS/P2P 提高域名解析的速度&#xff1a;local name server高速缓存&#xff1a;直接地址映射/低级的域名服务器的地址 本机也有告诉缓存&#xff1a;本机开机的时候从本地域名服务器当中下载域名和地址的对应数据库&#xff0c;放到本地的高…...

Android MVVM 写法

前言 Model&#xff1a;负责数据逻辑 View&#xff1a;负责视图逻辑 ViewModel&#xff1a;负责业务逻辑 持有关系&#xff1a; 1、ViewModel 持有 View 2、ViewModel 持有 Model 3、Model 持有 ViewModel 辅助工具&#xff1a;DataBinding 执行流程&#xff1a;View &g…...

LeetCode 热题 100——283. 移动零

283. 移动零 提示 简单 2.3K 相关企业 给定一个数组 nums&#xff0c;编写一个函数将所有 0 移动到数组的末尾&#xff0c;同时保持非零元素的相对顺序。 请注意 &#xff0c;必须在不复制数组的情况下原地对数组进行操作。 示例 1: 输入: nums [0,1,0,3,12] 输出: [1,…...

neovim调试xv6-riscv过程中索引不到对应头文件问题

大家好&#xff0c;我叫徐锦桐&#xff0c;个人博客地址为www.xujintong.com&#xff0c;github地址为https://github.com/jintongxu。平时记录一下学习计算机过程中获取的知识&#xff0c;还有日常折腾的经验&#xff0c;欢迎大家访问。 和这篇文章neovim调试linux内核过程中索…...

轻量应用服务器与云服务器CVM对比——腾讯云

腾讯云轻量服务器和云服务器CVM该怎么选&#xff1f;不差钱选云服务器CVM&#xff0c;追求性价比选择轻量应用服务器&#xff0c;轻量真优惠呀&#xff0c;活动 https://curl.qcloud.com/oRMoSucP 轻量应用服务器2核2G3M价格62元一年、2核2G4M价格118元一年&#xff0c;540元三…...

骑砍战团MOD开发(31)-游戏AI控制

一.骑砍单机模式下AI控制 骑砍战团中野外战斗,训练场中小兵和地方小兵的行为统称为场景AI. 骑砍大地图中敌军追踪和遭遇追击统称为大地图AI. 二.骑砍场景AI 骑砍引擎通过header_mission_templates,py定制AI常量控制小兵位置,动作和朝向.可实现自定义阵型和攻击动作。 # Agen…...

flutter学习-day21-使用permission_handler进行系统权限的申请和操作

文章目录 1. 介绍2. 环境准备2-1. Android2-2. iOS 3. 使用 1. 介绍 在大多数操作系统上&#xff0c;权限不是在安装时才授予应用程序的。相反&#xff0c;开发人员必须在应用程序运行时请求用户的许可。在 flutter 开发中&#xff0c;则需要一个跨平台(iOS, Android)的 API 来…...

虹科方案丨L2进阶L3,数据采集如何助力自动驾驶

来源&#xff1a;康谋自动驾驶 虹科方案丨L2进阶L3&#xff0c;数据采集如何助力自动驾驶 原文链接&#xff1a;https://mp.weixin.qq.com/s/qhWy11x_-b5VmBt86r4OdQ 欢迎关注虹科&#xff0c;为您提供最新资讯&#xff01; 12月14日&#xff0c;宝马集团宣布&#xff0c;搭载…...

Kubernetes 学习总结(42)—— Kubernetes 之 pod 健康检查详解

Kubernetes 入门 回想 2017 年刚开始接触 Kubernetes 时&#xff0c;碰到 Pod一直起不来的情况&#xff0c;就开始抓瞎。后来渐渐地掌握了一些排查方法之后&#xff0c;这种情况才得以缓解。随着时间推移&#xff0c;又碰到了问题。有一天在部署某个 springboot 微服务时&…...

【后端】Docker学习笔记

文章目录 Docker一、Docker安装&#xff08;Linux&#xff09;二、Docker概念三、Docker常用命令四、数据卷五、自定义镜像六、网络七、DockerCompose Docker Docker是一个开源平台&#xff0c;主要基于Go语言构建&#xff0c;它使开发者能够将应用程序及其依赖项打包到一个轻…...

UE5.1_Gameplay Debugger启用

UE5.1_Gameplay Debugger启用 重点问题&#xff1a; Gamplay Debugger启用不知道&#xff1f; Apostrophe、Tilde键不知道是哪个&#xff1f; Gameplay调试程序 | 虚幻引擎文档 (unrealengine.com) Gameplay Debugger...

【论文阅读+复现】SparseCtrl: Adding Sparse Controls to Text-to-Video Diffusion Models

SparseCtrl:在文本到视频扩散模型中添加稀疏控制。 &#xff08;AnimateDiff V3&#xff0c;官方版AnimateDiffControlNet&#xff0c;效果很丝滑&#xff09; code&#xff1a;GitHub - guoyww/AnimateDiff: Official implementation of AnimateDiff. paper&#xff1a;htt…...

速盾cdn:ddos防护手段

速盾CDN采用多种手段来进行DDoS防护&#xff0c;以确保网络和网站的正常运行。以下是速盾CDN可能采用的一些主要DDoS防护手段&#xff1a; 实时监测和分析&#xff1a; 速盾CDN实时监测网络流量&#xff0c;通过分析流量模式来检测异常行为&#xff0c;以迅速发现潜在的DDoS攻击…...

STL——queue容器

1.queue基本概念 概念&#xff1a;queue是一种先进先出&#xff08;First In First Out,FIFO&#xff09;的数据结构&#xff0c;它有两个出口。 队列容器允许从一端新增元素&#xff0c;从另一端移除元素。 队列中只有队头和队尾才可以被外界使用&#xff0c;因此队列不允许…...

gitLab页面打tag操作步骤

作者&#xff1a;moical 链接&#xff1a;gitLab页面打tag简单使用 - 掘金 (juejin.cn) 来源&#xff1a;稀土掘金 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 ---------------------------------------------------------------------…...

QrazyBox终极指南:专业二维码修复工具拯救你的损坏二维码

QrazyBox终极指南&#xff1a;专业二维码修复工具拯救你的损坏二维码 【免费下载链接】qrazybox QR Code Analysis and Recovery Toolkit 项目地址: https://gitcode.com/gh_mirrors/qr/qrazybox 你是否曾因打印模糊、水渍污染或屏幕划痕导致的重要二维码无法扫描而焦急…...

Taotoken的Token Plan套餐如何帮助初创公司控制AI实验成本

&#x1f680; 告别海外账号与网络限制&#xff01;稳定直连全球优质大模型&#xff0c;限时半价接入中。 &#x1f449; 点击领取海量免费额度 Taotoken的Token Plan套餐如何帮助初创公司控制AI实验成本 1. 成本不可预测&#xff1a;初创AI实验的常见困境 在产品原型和早期开…...

Loop:终极免费开源Mac窗口管理工具,彻底解决桌面杂乱问题

Loop&#xff1a;终极免费开源Mac窗口管理工具&#xff0c;彻底解决桌面杂乱问题 【免费下载链接】Loop Window management made elegant. 项目地址: https://gitcode.com/GitHub_Trending/lo/Loop 你是否曾经因为Mac上杂乱的窗口布局而效率低下&#xff1f;当多个应用同…...

5分钟掌握DLSS Swapper:免费开源游戏性能优化神器

5分钟掌握DLSS Swapper&#xff1a;免费开源游戏性能优化神器 【免费下载链接】dlss-swapper 项目地址: https://gitcode.com/GitHub_Trending/dl/dlss-swapper DLSS Swapper是一款专为PC游戏玩家设计的免费开源工具&#xff0c;能够智能管理、下载和替换游戏中的DLSS、…...

昇腾CANN cann-recipes-infer Continuous Batching:从静态 Padding 到动态调度,吞吐翻 10 倍

LLM 推理服务线上最大的浪费&#xff1a;静态 batching。一个 batch 里 8 个请求&#xff0c;序列长度从 12 到 2048——短的 12 个 token 2ms 就算完了&#xff0c;然后等长的那条跑完。190ms 算力闲置&#xff0c;GPU/NPU 空转。Continuous Batching 的解法&#xff1a;不等—…...

n8n高危RCE漏洞深度解析与生产环境加固指南

1. 这不是普通升级通知&#xff1a;n8n高危漏洞的本质威胁与真实影响面n8n自动化平台爆6个高危漏洞&#xff0c;4个RCE可致服务器完全接管——这句话在2024年Q2的DevOps和低代码运维圈里&#xff0c;不是标题党&#xff0c;是凌晨三点被PagerDuty叫醒后第一眼看到的告警摘要。我…...

OpenMemories-Tweak终极指南:3步解锁索尼相机全部隐藏功能

OpenMemories-Tweak终极指南&#xff1a;3步解锁索尼相机全部隐藏功能 【免费下载链接】OpenMemories-Tweak Unlock your Sony cameras settings 项目地址: https://gitcode.com/gh_mirrors/op/OpenMemories-Tweak OpenMemories-Tweak是一款专为索尼相机用户设计的开源工…...

Axure RP 多版本本地化引擎:高性能界面翻译架构解析与部署指南

Axure RP 多版本本地化引擎&#xff1a;高性能界面翻译架构解析与部署指南 【免费下载链接】axure-cn Chinese language file for Axure RP. Axure RP 简体中文语言包。支持 Axure 11、10、9。不定期更新。 项目地址: https://gitcode.com/gh_mirrors/ax/axure-cn Axure…...

深度解析unrpa:Ren‘Py游戏资源提取工具的核心技术与实践指南

深度解析unrpa&#xff1a;RenPy游戏资源提取工具的核心技术与实践指南 【免费下载链接】unrpa A program to extract files from the RPA archive format. 项目地址: https://gitcode.com/gh_mirrors/un/unrpa unrpa是一款专为RenPy视觉小说引擎设计的RPA归档格式提取工…...

字典树(Trie)详解 + Java 代码实现

目录 一、字典树核心概念 1. 结构特点 2. 核心应用场景 3. 时间复杂度 二、字典树结构设计 三、完整 Java 代码实现 四、代码逐段讲解 1. 节点类 TrieNode 2. 插入方法 insert 3. 查询单词 search 4. 查询前缀 startsWith 五、字典树优点 vs 缺点 优点 缺点 六、…...