【vim && neovim】从入门到放弃(“四种”模式、常用命令、正则表达式、文件属性、插件安装--代码补全、一键格式化、显示目录)(三)

简介: 本文所有操作均通过ssh连接腾讯云服务器完成。如果你正在使用安装GNOME桌面的Linux,很多操作可以通过鼠标完成,或许更加直观。推荐使用neovim(结合鼠标操作更加丝滑)。

4.44 C语言代码格式化:clang-format

上面的格式化命令是用的coc的,他的缩进是2个空格,研究了一下,没能成功修改成4个空格(我写C语言代码格式化的时候需要4个空格缩进,有些语言是2个空格)。


我去github上请教了开发人员,他们告诉我使用clang-format。

c32b2de6fdda092e048888624ef749e4_a3ec7c66bbd942e4b7484db4d440da59.png

C语言代码补全,已经安装了coc-clangd和clangd(前面刚刚讲过),现在现需要安装clang-format来实现C语言的代码格式化。(clangd是C语言等的语言服务器,用来代码补全等,而clang是编译器,clang-format是代码格式化工具)


ClangFormat 支持的语言有:C/C++/Java/JavaScript/Objective-C/Protobuf/C#

ClangFormat 支持的规范有:LLVM,Google,Chromium,Mozilla 和 WebKit

安装clang-format:

apt install clang-format

设置clang-format的语言规范,生成配置文件:

clang-format -style=llvm --dump-config >~/.clang-format

然后去上面这个配置文件中进行自定义修改,比如缩进4个空格(配置文件模式缩进2个空格),就改下面这句:

af40c008964d6cdf03bdc50ada1f154a_ca56f14d01154651aebbfe0af4536148.png

在命令行使用clang-format

clang-format -style=file  HashMap.c  >new.c

这里重定向是吧格式化后的代码保存到一个新文件中,如果不重定向,会直接输出在命令行,不能重定向到源文件,直接全部删除了,如果是追加的话,又会重复一次😅

现在可以在nvim中使用4.43节设置的快捷键,无需其他配置,coc-format-selected在安装clang-format后,在格式化C语言的时候,会使用clang-format的配置文件。

4.45 显示对齐线

在Plug那里添加:

Plug 'Yggdroot/indentLine'

然后安装这个插件就好了。

效果:

5cf96f677ecb6c4cb080ef84f6185c20_9974f54f93814ac4bfab263dc7289a43.png

4.5 我的nvim配置文件

自己看着修改吧

" ----------------------最常用、最基本设置-----------------------------
colorscheme  evening    "配色方案
syntax enable            " 开启语法高亮功能
syntax on                " 自动语法高亮
set t_Co=256             " 开启256色支持
set number               " 开启行号显示
set ruler                " 总是显示光标位置
set cursorline           " 高亮显示当前行
filetype on              " 设置开启文件类型侦测
set mouse=a              "开启鼠标支持
set mousemodel=extend    "开启侧边滚动条
" """""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""""
let mapleader = ","        " 定义<leader>键
" set nocompatible         " 设置不兼容原始vi模式
" filetype plugin on       " 设置加载对应文件类型的插件
" set noeb                 " 关闭错误的提示
set cmdheight=1          " 设置命令行的高度
set showcmd              " select模式下显示选中的行数
set laststatus=2         " 总是显示状态栏
set whichwrap+=<,>,h,l   " 设置光标键跨行
" set ttimeoutlen=0        " 设置<ESC>键响应时间
set virtualedit=block,onemore   " 允许光标出现在最后一个字符的后面
" set history=100                        " 设置历史记录条数
" ----------------------代码缩进完整配置-----------------------------
set autoindent           " 设置自动缩进
set cindent              " 设置使用C/C++语言的自动缩进方式
set cinoptions=g0,:0,N-s,(0    " 设置C/C++语言的具体缩进方式
set smartindent          " 智能的选择对其方式
filetype indent on       " 自适应不同语言的智能缩进
filetype plugin on       " 载入文件类型插件
set expandtab            " 将制表符扩展为空格(关于制表符和空格,有的语言可能不同,谨慎设置)
set tabstop=4            " 设置编辑时制表符占用空格数
set shiftwidth=4         " 设置格式化时制表符占用空格数
set softtabstop=4        " 设置4个空格为制表符
set smarttab             " 在行和段开始处使用制表符
set nowrap               " 禁止折行
set backspace=2          " 使用回车键正常处理indent,eol,start等
set sidescroll=10        " 设置向右滚动字符数
set nofoldenable         " 禁用折叠代码
" ----------------------代码补全-----------------------------
set wildmenu             " vim自身命名行模式智能补全
set completeopt-=preview " 补全时不显示窗口,只显示补全列表
" ----------------------搜索-----------------------------
set hlsearch            " 高亮显示搜索结果
" set incsearch           " 开启实时搜索功能
 set noignorecase        " 搜索时大小写不敏感
" ----------------------文件缓存-----------------------------
" set nobackup            " 设置不备份
" set noswapfile          " 禁止生成临时文件
set autoread            " 文件在vim之外修改过,自动重新读入
set autowrite           " 设置自动保存
set confirm             " 在处理未保存或只读文件的时候,弹出确认
" ----------------------编码-----------------------------
 set termencoding=utf-8
 set fileencodings=utf8,ucs-bom,gbk,cp936,gb2312,gb18030
 "---------------------插件安装---------------------------
 call plug#begin('~/.config/nvim/plugged')
Plug 'neoclide/coc.nvim', {'branch': 'release'} 
Plug 'nvim-tree/nvim-tree.lua'                    
 call plug#end()
"---------------coc配置------------------
set nobackup
set nowritebackup
set updatetime=300
set signcolumn=yes
inoremap <silent><expr> <TAB>
      \ coc#pum#visible() ? coc#pum#next(1) :
      \ CheckBackspace() ? "\<Tab>" :
      \ coc#refresh()
inoremap <expr><S-TAB> coc#pum#visible() ? coc#pum#prev(1) : "\<C-h>"
inoremap <silent><expr> <CR> coc#pum#visible() ? coc#pum#confirm()
                              \: "\<C-g>u\<CR>\<c-r>=coc#on_enter()\<CR>"
function! CheckBackspace() abort
      let col = col('.') - 1
      return !col || getline('.')[col - 1]  =~# '\s'
endfunction
if has('nvim')
    inoremap <silent><expr> <c-space> coc#refresh()
else
    inoremap <silent><expr> <c-@> coc#refresh()
endif
nmap <silent> [g <Plug>(coc-diagnostic-prev)
nmap <silent> ]g <Plug>(coc-diagnostic-next)
nmap <silent> gd <Plug>(coc-definition)
nmap <silent> gy <Plug>(coc-type-definition)
nmap <silent> gi <Plug>(coc-implementation)
nmap <silent> gr <Plug>(coc-references)
nnoremap <silent> K :call ShowDocumentation()<CR>
function! ShowDocumentation()
      if CocAction('hasProvider', 'hover')
          call CocActionAsync('doHover')
      else
          call feedkeys('K', 'in')
      endif
endfunction
autocmd CursorHold * silent call CocActionAsync('highlight')
nmap <leader>rn <Plug>(coc-rename)
xmap <leader>f  <Plug>(coc-format-selected)
nmap <leader>f  <Plug>(coc-format-selected)
augroup mygroup
      autocmd!
      autocmd FileType typescript,json setl formatexpr=CocAction('formatSelected')
      autocmd User CocJumpPlaceholder call CocActionAsync('showSignatureHelp')
augroup end
xmap <leader>a  <Plug>(coc-codeaction-selected)
nmap <leader>a  <Plug>(coc-codeaction-selected)
nmap <leader>ac  <Plug>(coc-codeaction-cursor)
nmap <leader>as  <Plug>(coc-codeaction-source)
nmap <leader>qf  <Plug>(coc-fix-current)
nmap <silent> <leader>re <Plug>(coc-codeaction-refactor)
xmap <silent> <leader>r  <Plug>(coc-codeaction-refactor-selected)
nmap <silent> <leader>r  <Plug>(coc-codeaction-refactor-selected)
nmap <leader>cl  <Plug>(coc-codelens-action)
xmap if <Plug>(coc-funcobj-i)
omap if <Plug>(coc-funcobj-i)
xmap af <Plug>(coc-funcobj-a)
omap af <Plug>(coc-funcobj-a)
xmap ic <Plug>(coc-classobj-i)
omap ic <Plug>(coc-classobj-i)
xmap ac <Plug>(coc-classobj-a)
omap ac <Plug>(coc-classobj-a)
if has('nvim-0.4.0') || has('patch-8.2.0750')
    nnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
    nnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
    inoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(1)\<cr>" : "\<Right>"
    inoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? "\<c-r>=coc#float#scroll(0)\<cr>" : "\<Left>"
    vnoremap <silent><nowait><expr> <C-f> coc#float#has_scroll() ? coc#float#scroll(1) : "\<C-f>"
    vnoremap <silent><nowait><expr> <C-b> coc#float#has_scroll() ? coc#float#scroll(0) : "\<C-b>"
endif
nmap <silent> <C-s> <Plug>(coc-range-select)
xmap <silent> <C-s> <Plug>(coc-range-select)
command! -nargs=0 Format :call CocActionAsync('format')
command! -nargs=? Fold :call     CocAction('fold', <f-args>)
command! -nargs=0 OR   :call     CocActionAsync('runCommand', 'editor.action.organizeImport')
set statusline^=%{coc#status()}%{get(b:,'coc_current_function','')}
nnoremap <silent><nowait> <space>a  :<C-u>CocList diagnostics<cr>
nnoremap <silent><nowait> <space>e  :<C-u>CocList extensions<cr>
nnoremap <silent><nowait> <space>c  :<C-u>CocList commands<cr>
nnoremap <silent><nowait> <space>o  :<C-u>CocList outline<cr>
nnoremap <silent><nowait> <space>s  :<C-u>CocList -I symbols<cr>
nnoremap <silent><nowait> <space>j  :<C-u>CocNext<CR>
nnoremap <silent><nowait> <space>k  :<C-u>CocPrev<CR>
nnoremap <silent><nowait> <space>p  :<C-u>CocListResume<CR>
"  代码格式化:逗号+l
nnoremap<leader>l ggVG<C-u><Plug>(coc-format-selected)<CR>
" 全选: 逗号+m
nnoremap<leader>m ggVG
"------------------nvim-------------------------------------
" 打开文件夹快捷键:空格+b
lua require("plugin/nvim-tree")
nnoremap <silent> <space>b :NvimTreeToggle<CR>


相关文章
|
10月前
|
数据采集 监控 数据安全/隐私保护
Python正则表达式:用"模式密码"解锁复杂字符串
正则表达式是处理字符串的强大工具,本文以Python的`re`模块为核心,详细解析其原理与应用。从基础语法如字符类、量词到进阶技巧如贪婪匹配与预定义字符集,结合日志分析、数据清洗及网络爬虫等实战场景,展示正则表达式的强大功能。同时探讨性能优化策略(如预编译)和常见错误解决方案,帮助开发者高效掌握这一“瑞士军刀”。最后提醒,合理使用正则表达式,避免过度复杂化,追求简洁优雅的代码风格。
273 0
|
Linux 开发工具
Vim有哪些基本模式,它们分别有什么用途?
Vim,作为Linux和其他操作系统上最受欢迎的文本编辑器之一,以其独特的模式化操作而闻名。这些模式为Vim提供了强大的功能和灵活性,使得用户可以高效地进行文本编辑。
283 5
|
开发工具
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
vi编辑器,现在vi\vim是文本文件进行编辑的最佳选择,Vim是vi的加强的版本,兼容vi的所有指令,vim编辑器有三种工作模式,一开始进入的是命令模式,命令模式i是插入的意思,两下y+p复制内容
|
机器学习/深度学习 Linux 编译器
Linux入门3——vim的简单使用
Linux入门3——vim的简单使用
226 1
|
SQL 数据处理 数据库
SQL正则表达式应用:文本数据处理的强大工具——深入探讨数据验证、模式搜索、字符替换等核心功能及性能优化和兼容性问题
【8月更文挑战第31天】SQL正则表达式是数据库管理和应用开发中处理文本数据的强大工具,支持数据验证、模式搜索和字符替换等功能。本文通过问答形式介绍了其基本概念、使用方法及注意事项,帮助读者掌握这一重要技能,提升文本数据处理效率。尽管功能强大,但在不同数据库系统中可能存在兼容性问题,需谨慎使用以优化性能。
378 0
|
Linux 开发工具
【Linux文本编辑艺术】:从入门到熟练,Vim大师之路揭秘
【Linux文本编辑艺术】:从入门到熟练,Vim大师之路揭秘
|
开发工具
基本 Vim 命令 - 入门指南
【8月更文挑战第18天】
395 0
|
开发工具
【专栏】Vim的可视模式是其强大之处,允许图形化选择文本
【4月更文挑战第28天】Vim的可视模式是其强大之处,允许图形化选择文本,。通过`v`、`V`和`Ctrl + v`进入。基本操作包括选择文本、复制/剪切(`y`、`d`)、粘贴(`p`)及退出(Esc或`<C-c>`)。高级技巧涉及结合其他Vim命令、宏录制和与系统剪贴板交互。掌握可视模式能大幅提升文本编辑效率。
479 1
|
JavaScript 前端开发 索引
JavaScript中的正则表达式:使用与模式匹配
【4月更文挑战第22天】本文介绍了JavaScript中的正则表达式及其模式匹配,包括字面量和构造函数定义方式,以及`test()`、`match()`、`search()`和`replace()`等匹配方法。正则表达式由元字符(如`.`、`*`、`[]`)和标志(如`g`、`i`)组成,用于定义搜索模式。文中还分享了正则使用的技巧,如模式分解、非捕获分组和注释。掌握正则表达式能提升文本处理的效率和代码质量。
|
Python
python正则表达式入门
python正则表达式入门
129 0