当前位置: 首页 > 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;非商业转载请注明出处。 ---------------------------------------------------------------------…...

神秘的Cookie和Session

Cookie 1.Cookie是什么&#xff1f; Cookie是浏览器提供的持久化储存数据的方式。 2.从哪里来&#xff1f; Cookie从服务器中来&#xff0c;存储到客户端中。一个客户端就对应着一个浏览器。 服务器代码中决定了什么样的数据会储存到客户端中&#xff0c;通过HTTP相应的Se…...

springboot接口文档

Swagger 在Spring Boot中生成和维护接口文档的一个常用方法是使用Swagger。Swagger是一个开源软件框架,它帮助开发者设计、构建、记录和使用RESTful Web服务。下面是在Spring Boot项目中使用Swagger来创建接口文档的详细步骤:1. 添加Swagger依赖 在你的Spring Boot项目的pom…...

深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈

深入浅出图解C#堆与栈 C# HeapingVS Stacking第一节 理解堆与栈 [深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第一节 理解堆与栈](https://mp.csdn.net/mdeditor/101021023)[深入浅出图解C#堆与栈 C# Heap(ing) VS Stack(ing) 第二节 栈基本工作原理](https://mp.csdn.n…...

Maven的使用和配置

Maven的使用和配置 起源&#xff1a; Apache 软件基金会(非营业的组织&#xff0c;把一些开源软件维护管理起来) maven 是apache的一个开源项目&#xff0c;是一个优秀的项目构建(管理)工具&#xff0c; maven 管理项目中的jar&#xff0c;以及jar与jar之间的依赖 maven 可…...

MongoDB 数据类型

目录 BSON 类型 二进制数据&#xff08;Binary Data&#xff09; ObjectId ObjectId定义 文档中的ObjectId ObjectId的单调性 字符串&#xff08;String&#xff09; 时间戳&#xff08;Timestamps&#xff09; 日期&#xff08;Date&#xff09; BSON类型的排序 数…...

Java 将 List 转换为 String常见方式

将 List 转换为 String的几种方式 使用 List的toString()方法将 List 转换为 String&#xff1b;结果前后会带有英文的中括号[]&#xff0c;如&#xff1a;[1, 2, 3, 4, 5]使用Java8 stream流中的Collections.joining()方法&#xff0c;带有逗号分隔符或自定义分隔符将集合转成…...

Redis(认识NoSQL,认识redis,安装redis,redis桌面客户端,redis常见命令,redis的Java客户端)

文章目录 Redis快速入门1.初识Redis1.1.认识NoSQL1.1.1.结构化与非结构化1.1.2.关联和非关联1.1.3.查询方式1.1.4.事务1.1.5.总结 1.2.认识Redis1.3.安装Redis1.3.1.依赖库1.3.2.上传安装包并解压1.3.3.启动1.3.4.默认启动1.3.5.指定配置启动1.3.6.开机自启 1.4.Redis桌面客户端…...

idea 出现Cannot resolve symbol ‘springframework‘解决方法

Maven手动重新加载 1&#xff09;File–>Invalidate Caches / Restart… 清理缓存&#xff0c;重启idea客户端 2&#xff09;File–>Maven–>Reload project重新从maven中加载工程依赖的组件...

ubuntu22.04安装anacoda遇到的坑

这几天把用了3年的windows10换成了ubuntu22.04 各种环境都得配置&#xff0c;本文记录下遇到的坑。 1、anacoda在ubuntu上也可以用官方也提供了安装包&#xff0c;但是没有图形界面&#xff0c;需要以命令行的方式安装和运行配置 1.1 安装&#xff1a;官网下载后&#xff0c;…...

window的OPen方法,弹窗的特征

文章目录 一、介绍二、弹窗的特征 一、介绍 window.open() 方法是 JavaScript 中的一个内置方法&#xff0c;用于在浏览器中打开一个新的窗口或标签页。 语法&#xff1a; window.open(url, name, features, replace)二、弹窗的特征 open方法参数说明: 参数说明url要载入窗…...

DFS算法查找所有路径详解

DFS算法查找所有路径详解 算法介绍 深度优先搜索&#xff08;Depth-First Search&#xff0c;DFS&#xff09;是一种图遍历算法&#xff0c;它从起始节点开始&#xff0c;沿着一条路径尽可能深入&#xff0c;直到达到最深的节点&#xff0c;然后回溯到前一节点&#xff0c;继…...

单片机的存储、堆栈与程序执行方式

一、单片机存储区域 如图所示位STM32F103ZET6的参数&#xff1a; 单片机的ROM&#xff08;内部FLASH&#xff09;&#xff1a;512KB&#xff0c;用来存放程序代码的空间。 单片机的RAM&#xff1a;64KB&#xff0c;一般都被分配为堆、栈、变量等的空间。 二、堆和栈的概念 …...

Web3开发成本和主要特性

多年来&#xff0c;技术不断进步&#xff0c;可帮助您的业务领先于竞争对手。如今&#xff0c;您可以看到许多更新和变化&#xff0c;使技术更加先进&#xff0c;对企业更加有用。到现在为止&#xff0c;web1.2和2.0比较流行&#xff0c;但是要知道web 3才是技术之父&#xff0…...

【数学建模美赛M奖速成系列】Matplotlib绘图技巧(一)

Matplotlib图像基础 写在前面1 基本绘图实例&#xff1a;sin、cos函数图2 plot()函数详解**kwargs参数&#xff1a; 3 matplotlib中绘图的默认配置4 设置图的横纵坐标的上下界5 设置横纵坐标上的记号6 调整图像的脊柱7 添加图例8 给一些特殊点加注释9 子图最后 写在前面 前面我…...

005、数据类型

1. 关于数据类型 Rust中&#xff0c;每个值都有其特定的数据类型&#xff0c;Rust会根据数据的类型来决定如何处理它们。 Rust是一门静态类型语言&#xff0c;它在编译程序的过程中就需要知道所有变量的具体类型。在大部分情况下&#xff0c;编译器可以根据我们如何绑定、使用变…...

软考网络工程师考试大纲(2018年最新版)

本书是全国计算机专业技术资格考试办公室组织编写的网络工程师考试大纲,本书除大纲内容外,还包括了人力资源和社会保障部、工业和信息化部的有关文件以及考试简介。 网络工程师考试大纲是针对本考试的计算机网络中级资格制定的。通过本考试的考生,可被用人单位择优聘任为工…...

【数据结构】栈【详解】

目录 栈的定义&#xff1a; 栈的声明与定义&#xff1a; 头文件的包含&#xff1a; 对栈的基本操作&#xff1a; 栈的初始化&#xff1a; 摧毁栈: 入栈&#xff1a; ​编辑 出栈&#xff1a; ​编辑 输出栈顶位置&#xff1a; 输出栈的当前大小&#xff1a; 判空操…...

CSS 纵向底部往上动画

<template><div class"container" mouseenter"startAnimation" mouseleave"stopAnimation"><!-- 旋方块 --><div class"box" :class"{ scale-up-ver-bottom: isAnimating }"><!-- 元素内容 --&g…...

常用的 MySQL 可视化客户端

数据库可视化客户端&#xff08;GUI&#xff09;让用户在和数据库进行交互时&#xff0c;能直观地查看、创建和修改对象&#xff0c;如&#xff1a;表、行和列。让数据库操作变得更方便了。 今天&#xff0c;我们来了解下目前市场上最常用的 MySQL 可视化客户端。 官方&#x…...

C#使用SyntaxTree获取.cs文件中的属性名和注释

有时候&#xff0c;我们可能需要获取.cs文件中的属性和对应的注释来生成一些代码&#xff0c;比如SQL查询什么的。 但使用正则匹配有时候会不准确。搜索了下&#xff0c;发现微软提供了代码解析的API。 具体如下两个方法&#xff1a; /// <summary> /// 获取所有属性和…...

基于价值认同的需求侧电能共享分布式交易策略(matlab完全复现)

目录 1 主要内容 2 部分程序 3 程序结果 4 下载链接 1 主要内容 该程序完全复现《基于价值认同的需求侧电能共享分布式交易策略》&#xff0c;针对电能共享市场的交易机制进行研究&#xff0c;提出了基于价值认同的需求侧电能共享分布式交易策略&#xff0c;旨在降低电力市…...

门控循环单元(GRU)-多输入回归预测

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、部分程序&#xff1a; 四、全部代码数据分享&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译…...

电池管理系统BMS中SOC算法通俗解析(二)

下面简单介绍下我们BMS保护板使用的SOC估算方法。我们算法的主要是针对电流积分法计算SOC的局限性进行改进&#xff1a; ●电池包第一次上电使用开路电压法估算SOC。第一次上电&#xff0c;根据电池包厂家给出的电压和剩余容量二维关系图大概估算出目前电池包的剩余容量即SOC。…...

YOLOv5改进 | 2023主干篇 | 华为最新VanillaNet主干替换Backbone实现大幅度长点

一、本文介绍 本文给大家来的改进机制是华为最新VanillaNet网络&#xff0c;其是今年最新推出的主干网络&#xff0c;VanillaNet是一种注重极简主义和效率的神经网络架构。它的设计简单&#xff0c;层数较少&#xff0c;避免了像深度架构和自注意力这样的复杂操作(需要注意的是…...

爬虫工作量由小到大的思维转变---<第三十三章 Scrapy Redis 23年8月5日后会遇到的bug)>

前言: 收到回复评论说,按照我之前文章写的: 爬虫工作量由小到大的思维转变---&#xff1c;第三十一章 Scrapy Redis 初启动/conn说明书)&#xff1e;-CSDN博客 在启动scrapy-redis后,往redis丢入url网址的时候遇到: TypeError: ExecutionEngine.crawl() got an unexpected …...

PostgreSQL | 概念 | 什么是OLTPOLAP?

什么是OLTP&OLAP&#xff1f; 大白话理解&#xff1a;业务系统都可以称作OLTP&#xff0c;基于业务系统产生的数据进行数据分析和决策的都可以称为OLAP。 OLTP OLTP&#xff08; Online Transaction Processing&#xff09;在线事务处理系统 用途&#xff1a; 用于支持日…...

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

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

Angular进阶之六:Progressive rendering

简介 Progressive Rendering 是一种提高 Web 应用性能的方法&#xff0c;允许页面在加载过程中逐步呈现&#xff0c;以提高用户体验。在本文中&#xff0c;我们将探讨如何在 Angular 中通过自定义指令实现 Progressive Rendering&#xff0c;特别是处理从服务器获取大量数据的…...

机器人中的数值优化之线性共轭梯度法

欢迎大家关注我的B站&#xff1a; 偷吃薯片的Zheng同学的个人空间-偷吃薯片的Zheng同学个人主页-哔哩哔哩视频 (bilibili.com) 本文ppt来自深蓝学院《机器人中的数值优化》 目录 1.无约束优化方法对比 2.Hessian-vec product 3.线性共轭梯度方法的步长​编辑 4.共轭梯度…...

嵌入式Linux C语言介绍

目录 一.前言 二.C语言的特点 一.前言 开发工具通常依赖于操作系统提供的各种功能和服务。许多开发工具都基于操作系统的API&#xff08;应用程序接口&#xff09;进行开发&#xff0c;这些API提供了文件处理、网络通信、图形界面等核心功能。没有操作系统的支持&#xff0c;…...