• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
拥包 AI,使用 AI。
不断向前
博客园    首页    新随笔    联系   管理    订阅  订阅
vim 使用笔记,vimrc 配置

滚屏和跳转

G  光标移动到文件底部
gg 光标移动到文件顶端

50% 光标跳转到文件 50% 处
 
zt 光标行显示在顶端
zz 光标行显示在中间
zb 光标行显示在底部 

H 光标移动到顶端
M 光标移动到中间
L 光标移动到底部

<C-e> 向下滚动
<C-y> 向上滚动

<C-u> 向上翻页,半页
<C-d> 向下翻页,半页

<C-b> 向上翻页,整页
<C-f> 向下翻页,整页

寄存器

将包含指定文本的行复制到寄存储中:

let @a = ''
:g/buffer/yank A
:new
"ap
  • 查看寄存器中的值::echo @a

  • 查看选项中的值:

    • 方法一::echo &runtimepath

    • 方法二::options

折叠的使用方法


查看折叠方法::set foldmethod

设置折叠方法::set foldmethod=marker

可选的折叠方法:

  • marker,标记

  • syntax,语法

  • manual,手动

  • indent,缩进

  • diff,未改变的文本

  • expr,见文档

通过帮助系统查看有关折叠的快捷键::h z

在 normal 模式下使用:

zM      递归的折叠所有部分
zR      展开所有折叠的部分(包括递归)
zm      增加一层(:h foldlevel)折叠
zr      减去一层折叠
zc      打开光标下的折叠
za      打开/关闭光标下的折叠
zj      去到下一个折叠上
zk      去到上一个折叠上

获取指定目录下的所有文件的路径

windows

在 Windows 下:

  • :r! dir /b /s src/

  • 选中读取的内容,依据文件的后缀进行排序 :'<,'>sort /.*\.h/ r

开头为 " 的行排在一起

:'<,'>g/"Plug/move 165

查找替换 : substitute, find, replace

替换多个文件中指定文本

  • 被替换者: test_123

  • 替换者: new_123

  • 使用 new_123 替换在同一个目录<dir>中的所有 h文件 中的 test_123:

:cd <dir>
:args *.h
:argdo %s/test_123/new_123/ge | update

上面命令的解释:

  • argdo 对所有在 args 中的文件执行后面的命令
  • %s/被替换者/替换者/ge
  • g 整个文件的所有符合条件者都被替换
  • e 没有找到的情况,不报错
  • | 用于执行多个命令
  • update 保存对文件执行的操作(只对已经修改的缓冲有效)

替换换行符

  • 在 Windows 下;:%s/\n/ /g

  • 将 ; 替换为换行符::%s/;/\r/g

查找:包含 .md 的目标被排除

^\w\+.*\.\(md\)\@!

解释:找到所有文件类型不为 md 的行

例子:

abc.md  排除
abc.txt 包含
test.cpp 包含

option 的设置

  • 一个布尔选项,表示开启:set imd

  • 表示取消:set noimd

缓冲设置

创建一个临时缓冲

缓冲不可保存,可以退出,在退出程序时,内容将丢失:

command! Scratch enew | setlocal buftype=nofile bufhidden=wipe noswapfile modifiable

pwsh(powershell) 使用方法

将 vim 的默认 shell 设置为 pwsh:

set shell=pwsh
set shellcmdflag=-Command

引用自:https://juliankay.com/development/setting-up-vim-to-work-with-powershell/

找到指定目录下的所有 cpp 文件,然后从中找到包含字符串 include 的文件:

  • 使用 pwsh 作为 shell: r!get-childitem -path path\to\src\*.cpp | select-string -pattern "include"

将行移动到标记位置

:move 'a

查看窗口的大小(宽度,高度),修改窗口大小的方法。

  • 调整当前窗口(称为 A,其它的为 B,C,...)的高度,:resize

  • 当前列有两个窗口:B 变为一行,A 占据其余高度;

  • 当前列有三个窗口:B,C 变为一行,A 占据其余高度;

据此可以知道,更多窗口的效果;

使用 CTRL-W = 在所有窗口均匀分布;

:resize 10 调整当前窗口的高度为 10;

调整窗口的宽度

:vertical resize 20 窗口宽度调整为 20;

vimrc 基础配置

! leader 键为空格

" 时间:2024年7月26日
" vim 的配置,用标记折叠的方式组织起来,感觉很好
"-------------------------------------------------------------------------------

"# 基础设置(没有任何依赖项) {{{
"-------------------------------------------------------------------------------

"tags: basic setting

"查看选项的具体效果,请使用 `:help <option-name>`

"## option 设置 {{{
"-------------------------------------------------------------------------------
":options

"Options:

" 自动加载脚本autoload-plugin
"packloadall          " 加载所有插件
"silent! helptags ALL " 为所有插件加载帮助文档
"noh                  " 清除高亮显示
set hlsearch            "高亮‘/’搜索到的匹配项

filetype plugin on
filetype indent on   " 根据文件类型自动缩进
filetype on
set fileencodings=utf-8,gbk
set complete-=i

"### gui options {{{
"-------------------------------------------------------------------------------
    
"set showtabline=1
"set guioptions-=T
"set guioptions-=m

"取消菜单、工具栏的显示
"set guioptions=
set laststatus=2

"set guifont=Lucida_Console:h18
"set guifont=Courier_New:b:h16

"}}} ## gui options

set textwidth=80       " 限制一行的长度,不错的功能
"set backspace=2        " 修正终端上的退格键 Backspace 的行为
"set softtabstop=4
"set relativenumber     "相对行号
"set paste              " 开启这个选项,复制进来的文本的换行符就不会乱
"set cindent            " C 语言的缩进
set noswapfile
set nobackup
set noundofile
set virtualedit=all 
set scrolloff=5     
set t_Co=256        " 开启 256 色

set foldlevel=3
set foldmethod=marker
"set cursorline
"set cursorcolumn

set autoindent " 开启自动缩进
set backspace=3
set expandtab           " 将制表符 Tab 展开为空格,这对于 Python 尤其有用
set mouse=a          " 开启鼠标,默认是不能使用鼠标的
set nowrap
set number              " 显示行号
set shiftwidth=4        " 用于自动缩进的空格数量
set sidescroll=10       " 自动的滚动文本,当移动的文本没有显示时
set syntax=on       " 开启语法高亮
set tabstop=4           " tab 的空格数量
"set iminsert=2     " 在 gvim 中存在很大的问题——我使用的是 rime 的郑码,进入
"insert mode 会导致输入法变为郑码,但我想用的是英文,因为,我用 vim
"是为了写代码。使用这个选项,不如直接使用 windows 的输入切换方式。

"}}} ## option 设置

"## runtimepath 路径 {{{
"-------------------------------------------------------------------------------

"查看当前的 runtimepath
set runtimepath+=~\.vim\UltiSnips
set runtimepath+=~\.vim

"}}} ## rumtimepath 路径

"## mapping {{{
"-------------------------------------------------------------------------------

"2025年05月09日 09:52 
"插入的模式下使用 <C-N> 成了 include "文件补全,速度太慢,怎么解决?重新映射一遍就行。
"15:53 找到原因,所以停用
"inoremap <C-N> <C-X><C-N>
"inoremap <C-P> <C-X><C-P>

"### leader key 2025-05-19 10:08:50 {{{ 
"--------------------------------------------------------------------------------

"let mapleader = "\\"
let mapleader = "\<space>"
"let mapleader = " "
"nnoremap <LEADER>v :Goyo<CR>
"nnoremap <Leader>g :call SwitchGui()<CR>
"nnoremap <LEADER>c :!start cmd<CR>
"nnoremap <LEADER>mo :browse oldfiles<CR>
"nnoremap <LEADER>mr :set nornu<CR>
"nnoremap <LEADER>ms :set foldmethod=syntax<CR>
"nnoremap <LEADER>o  :tabnew $MYVIMRC<CR>
nnoremap <LEADER>q :

"移动当前缓冲到新标签页
nnoremap <LEADER>t <c-w>T
"nnoremap <LEADER>z ZZ
nnoremap <Leader>h <C-W>h
nnoremap <Leader>j <C-W>j
nnoremap <Leader>k <C-W>k
nnoremap <Leader>l <C-W>l
inoremap <C-D> <ESC>:call CopyLine_InsertMode()<CR>a

" 2025年05月02日 09:47
" 快捷键在 windows 终端中无法正确接收,有错误的效果
" 在 gvim 中表现正确
"inoremap <C-Enter> <Esc>o

" 表现正确
"inoremap <S-Enter> <Esc>O

"}}} ### leader key

"### normal mode 2025-05-19 10:09:24 {{{ 
"--------------------------------------------------------------------------------
"function key
nnoremap <F3> :tabnew<CR>
"nnoremap <F7> :w<CR>
"nnoremap <F8> <C-U>
"nnoremap <F10> :wqa<CR>
"nnoremap <LEADER>mn :set nu<CR>

"}}} ### normal mode

"### insert mode 2025-05-19 10:10:08 {{{ 
"--------------------------------------------------------------------------------

"inoremap <F2> <CTRL-E>
"inoremap <F9> <Esc>

"inoremap <c-q> <Esc>:
inoremap <c-o> <Esc>
"inoremap <m-o> <Esc>
"inoremap <m-y> <c-y>

"Map: vim  删除前一个空格

"inoremap <C-f> <Esc>F xA
"inoremap <c-s> <esc>:w<cr>
"inoremap <C-L> <C-X><C-L>
"inoremap <C-D> <C-X><C-D>
"inoremap <C-F> <C-X><C-F>
"inoremap <C-]> <C-X><C-]>

"g-prefix mode
"-------------------------------------------------------------------------------
"使用 :h g 
"查看默认的映射

"nnoremap go :call OnlyTab()<CR>
"nnoremap cx :call CopyLine_Normal()<CR>
"nnoremap <M-o> <C-W>o
"nnoremap <Space> <C-d>
"inoremap <M-n> <C-n>
"inoremap <M-p> <C-p>
"nnoremap <M-d> <C-d>
"nnoremap <M-u> <C-u>
"nnoremap <M-w> <C-w>
"nnoremap <c-q> :
"nnoremap <c-v> <c-q> "与终端中的快捷键冲突
nnoremap <C-n> :bel vnew<cr>
nnoremap <C-s> :w<cr>

"}}} ### insert mode

"}}} ## mapping

"## autocmd : au {{{
"-------------------------------------------------------------------------------

"au! BufNewFile *.cpp,*.h,*.hpp setlocal foldmethod=syntax
"au! BufRead *.cpp,*.h,*.hpp setlocal foldmethod=syntax
"autocmd! BufRead *.cpp,*.h,*.hpp set wrap | set foldmethod=syntax
au!      BufRead *.ixx set filetype=cpp 
au!      BufRead *.md set wrap

"}}} ## autocmd

"## abbreviations {{{

 
"}}} ## abbreviations

"## colorscheme {{{
"-------------------------------------------------------------------------------
"tags: cs, color

"set tgc
"hi Normal guibg=NONE 
" 在 windows terminal 上,可以是背景色变为透明。

"}}} ## colorscheme

"## 自定义状态栏 {{{
"-------------------------------------------------------------------------------
" 请阅读文档后再进行设置!
"set statusline=[%n]%1*%F%=%0*%2*%l,%c\ %p%%%0*\|ascii=%b,hex=%B%{((&fenc==\"\")?\"\":\"\ \|\ \\".&fenc)}\ \|\ \%{$USER}\ @\ %{hostname()}\    
"set statusline=[%n]\ %#HIComment%F%=\ \|\ %l,%c\ %p%%\ \|\ ascii=%b,hex=%B%{((&fenc==\"\")?\"\":\"\ \|\ \\".&fenc)}\ \|\ \%{$USER}\ @\ %{hostname()}\     " 没有效果
"set statusline=[%n]\ %f%m%r%h\ \|\ \ \ \|%=\|\ %l,%c\ %p%%\ \|\ ascii=%b,hex=%b%{((&fenc==\"\")?\"\":\"\ \|\\".&fenc)}\ \|\ \%{$USER}\ @\ %{hostname()}\
"set statusline=[%n]\ %f%m%r%h\ \|\ \ pwd:\ %{CurrentDir()}\ \|%=\|\ %l,%c\ %p%%\ \|\ ascii=%b,hex=%b%{((&fenc==\"\")?\"\":\"\ \|\\".&fenc)}\ \|\ \%{$USER}\ @\ %{hostname()}\

"}}} ## 自定义状态栏

"## register {{{

" 清空寄存器
"let @a ="" 

"}}} ## register

"}}} # 基础设置

"# 自定义的函数(并不是依赖项) {{{
"-------------------------------------------------------------------------------

"tags: Custom function, custom function

"Function: (隐藏/显示)菜单、工具栏的显示
"
function! SwitchGui()
    let gui_options = &guioptions
    for i in gui_options
        if i == 'm' || i == 'T'
            set guioptions-=m
            set guioptions-=T
            return
        endif
    endfor
    set guioptions+=m
    set guioptions+=T
endfunction

"## 向下重复行 2025-04-30 23:19:48 {{{ 

"Function: Lin  向下重复行(插入模式)
"
"向下复制行(插入模式)而不改变光标位置
"
function! CopyLine_InsertMode()
    let l:old_cursor = getcursorcharpos()
    execute "normal vYp"
    call setcursorcharpos(l:old_cursor[1]+1, l:old_cursor[2])
endfunction

"Function: Lin  向下重复行(正常模式)
"
"向下复制行而不改变光标位置
"
"TODO: 增长数字编号
"
"1. 在行开头(排除掉空白): [注释] 数字+.
"
function! CopyLine_Normal()
    let l:old_cursor = getcursorcharpos()
    execute "normal vYp"
    call setcursorcharpos(l:old_cursor[1]+1, l:old_cursor[2])
endfunction

"}}} ## 向下重复行

"Function: Lin  切分窗口
"
"使窗口位于中间,并打开顶部打开一个预览窗口
"
function! PlaceholderWindow()
    "wincmd T
    let winid = win_getid()

    " 创建垂直窗口
    "vnew

    vsplit

    " 调整当前窗口的大小
    vertical resize 80
    call win_gotoid(winid)

    "创建当前窗口的水平副本
    split
    resize 10
    call win_gotoid(winid)
endfunction

"通过 pwsh 来查看环境变量
"$> $env:path > tmp.txt; gvim tmp.txt
"%s/
posted on 2024-11-29 02:59  小明111222333  阅读(114)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3