【Linux】vimtutor

目录

1. vim 常见设置

2. vim 常见用法

2.1 移动光标

2.2 多行缩进

2.3 可视化模式

2.4 替换模式

2.5 末行替换

2.6 控制分屏的尺寸

2.6.1 上下分屏

2.6.2 左右分屏

2.6.3 分屏切换

2.7 跳转 man 手册

2.8 查看代码空格和结尾

2.9 全文复制

2.10 打开标签页

2.11 快速切换函数调用和函数声明

3. 常用配置

4. 自动插入文件头


1. vim 常见设置

  1. "set mouse=a  加注释,一个双引号即可
  2. nmap <F9> :set mouse-=a<cr>  设置快捷键 F9 来取消鼠标可用,按键映射 存储到哈希表中, <cr> 表示添加回车
  3. nmap <F10> :set mouse=a<cr>  设置快捷键 F10 来使得鼠标可用
  4. nmap <space>dm :set mouse-=a<cr>   先按下空格,再按 dm(自己设置)  重定义组合键
  5. nmap <space>em :set mouse=a<cr>
  6. nmap 是在普通模式下运行,递归,维护性差
  7. imap 是在插入模式下运行
  8. imap jk <esc>  在插入模式下按下 jk 保存
  9. imap jk <esc>:w<cr>  保存
  10. imap ( ()<esc>i   补全括号并且光标停留在 () 中,其实相当于一个字符串序列, 遇到 ( 解析成 () 此时光标在 () 中,按下 i 插入
  11. imap { {<cr>}<esc>i<cr>
  12. nnoremap 维护性好
  13. nnoremap J <c-w>j   c 表示 ctrl,按下 ctrl+w,m 表示 alt  但是 ssh 连接时会导致 alt 键不生效,调整窗口,调整的是分屏后的屏幕窗口
  14. nnoremap K <c-w>k   这里需要注意的是如果配置了该快捷键,那么在 vim 环境下不能查询库函数的帮助手册,这是因为查询的方式是 K(shift + k),按键冲突。
  15. set nu  设置行号
  16. set nonu  取消设置行号
  17. syntax on  语法高亮
  18. syntax off  取消语法高亮
  19. set mouse=a  允许鼠标可用
  20. set mouse-=a  允许从 windows 端复制数据到 ssh 连接工具中
  21. set ts=4  或者 set tabstop=4  Tab 缩进 4 格
  22. set expandtab Tab 替换空格,实际上存储的 Tab 就变成了空格
  23. set autoindent  保持上一行的缩进
  24. set cindent  保持 C 的自动缩进
  25. set smartindent 智能缩进
  26. set showmatch 在输入括号时,短暂地跳转到对应括号处  高亮显示匹配括号
  27. set backspace=2 使得退格键能够正常处理
  28. set incsearch 输入关键词时高亮显示
  29. set hlsearch 高亮显示搜索结果

2. vim 常见用法

2.1 移动光标

h :  左←
j :  下↓
k :  上↑
l :  右→
$ :  当前行的行尾
0 :  当前行的行首,如果有空白字符,则回到空白字符处
^ : 也是移动到行首,与 0 不同的是, ^ 移动到本行第一个单词的首个字符
L :  当前屏幕的最后一行
H :  当前屏幕的第一行
M :  当前屏幕的中间行
e :  移动到单词末尾
w :  移动到光标所在位置的下一个单词开始位置
b :  移动到光标所在位置的上一个单词开始位置
} :  下一个空白行
{ :  上一个空白行
% :  左右括号之间跳转
:num : 移动到 num 行,末行模式
:$   : 移动到当前文件的末尾,末行模式
G    : 移动到当前文件的末尾,即就是 shift+g
gg   : 文件最开始处
nyy  : 复制 n 行
nyw  : 拷贝光标所在位置 n 个单词
nyb  :拷贝光标所在位置之前的 n 个单词
x  : 删除光标所在位置的字符
dw : 删除从光标所在位置到当前单词结尾
db : 删除从光标所在位置到当前单词开始
dd : 删除光标所在行
D  : 删除从光标所在位置到当前行的行尾
d0 : 删除从光标所在位置到当前行的行首
d$ : 删除从光标所在位置到当前行的行尾
dG : 删除从光标所在位置到当前文件结尾
u :  撤销(undo)
ctrl + r : 撤销的撤销,即就是重做(read)

yy 或者 y 用于复制,类似于 ctrl + c,dd 或者 d 用于剪切,类似于 ctrl + x。 

自动补全使用  ctrl + n 即可。

将光标置于待查看宏定义的单词上,使用 [d 可以查看宏定义语句。

末行模式执行 shell 命令   :!command

  • :!man 2 open
  • :!ls -l
  • :!pwd

学习 vim 使用 vimtutor 命令即可。

2.2 多行缩进

  • 在末行模式下 :10,20>
  • 在可视模式下选中多行,按下 == 即可实现对齐,按下 >  可以缩进。
  • ctrl+v 进入列可视化模式后,选中要缩进的行然后按下 shift+i,在第一行敲个 Table,再按两下 Esc 即可实现多行缩进。

2.3 可视化模式

shift+v 直接选中光标所在行,并进入可视化行模式:
    x 用于删除选中的行
    y 用于复制选中的行
    p 用于粘贴
ctrl + v 进入可视化列模式
    x 用于删除选中的列
    y 用于复制选中的列
    p 用于粘贴
如,可视化列模式通常用于多行注释。
    ctrl + v 进入可视化列模式,然后按下 shift+i 进入插入模式,如果是注释 C 代码,那么按下 // ,最后按两下 Esc 即可实现添加多行注释。如果想要删除多行注释,可以在选中相应的列后,按下 d 或者 x 即可取消多行注释。

2.4 替换模式

在普通模式下,按下 r,然后按下想要替换后的字符,即可替换光标所在位置的字符。

2.5 末行替换

# 在 vim 里查找时,\n 代表换行符, \r 代表回车符。
# 而在替换时,\r 代表换行,\n 代表空字符。

以 int Add(int a, int b); 替换为
int Add(int a, int b) {

}

为例:

末行模式下,输入 :%s/;/ {\r\r}\r/g 即可全文替换成功。
如果只修改部分行,可以通过 :line1,line2s/;/ {\r\r}\r/g 进行替换,
其中:line1,line2 表示需要替换的行的范围。

# 消除 ^M
# ^M 的输入,按下 ctrl + v,然后再按下 ctrl + m 即可。
末行模式下,输入 :%s/^M//g 即可消除 ^M。

2.6 控制分屏的尺寸

2.6.1 上下分屏

:sp filename
:He    # 可在下边分屏中浏览目录结构以及文件

2.6.2 左右分屏

:vsp filename
:vs filename
:Ve    # 可在左边分屏中浏览目录结构以及文件

2.6.3 分屏切换

ctrl + ww  # 在不同屏之间切换
  • 减少当前窗口高度(对上下分屏才有用)ctrl+w -
  • 增加当前窗口高度(对上下分屏才有用)ctrl+w +
  • 增加当前窗口宽度(对左右分屏才有用)ctrl+w >      按完ctrl w 后松开,同时按下shift >
  • 减少当前窗口宽度(对左右分屏才有用)ctrl+w <      按完ctrl w 后松开,同时按下shift <
  • 使所有窗口恢复均等 ctrl+w =

2.7 跳转 man 手册

  • 使用 K 来跳转,不过需要知道要查询的函数在第几章,比如 printf 函数在第 3 章,那么光标定位到 printf 函数处,在普通模式中按下 3 K 即可跳转到 printf 的 man 手册。
  • 末行模式下 输入:!man 函数  即可查看man手册,需要注意的是,同样需要知道要查询的函数在第几章,比如查询 printf 函数,需要在末行模式下输入 :!man 3 printf

2.8 查看代码空格和结尾

# 在末行模式下使用
# 其中 ^I 代表 Table,$ 代表结尾
:set list TAB 
:set list
以上两种方式均可

2.9 全文复制

# 将 filename 文件的内容放在光标所在位置下面。
:r filename 

2.10 打开标签页

:tabe hehe.c # 打开标签页
# gt 切换后一个标签页,gT 往前一个标签页切换 

2.11 快速切换函数调用和函数声明

# 光标定位在 int 处,按下 shift+*   
# 实际上是正则表达式 ?\<int\> 

3. 常用配置

"This is sustzc config"
if (1)
syntax on

set nu
set tabstop=4
set shiftwidth=4
set autoindent
set cindent
set smartindent
set showmatch
set backspace=2
set incsearch
set hlsearch

set cursorcolumn
set cursorline                                                                                                                                          
highlight CursorLine   cterm=NONE ctermbg=darkred ctermfg=white guibg=NONE guifg=NONE
highlight CursorColumn cterm=NONE ctermbg=darkred ctermfg=white guibg=NONE guifg=NONE

set encoding=utf-8
set fileencodings=utf-8,ucs-bom,latin1,gb2312,gb18030,cp936,gbk,big5
set termencoding=utf-8

set fileformats=unix,dos

set clipboard+=unnamed

set ruler
set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%)

set confirm

"nnoremap <F9> :set mouse-=a<cr>
"nnoremap <F10> : set mouse=a<cr>
"nnoremap <space>dm :set mouse-=a<cr>
"nnoremap <space>em :set mouse=a<cr>

"nnoremap H <c-w>h
"nnoremap J <c-w>j
"nnoremap K <c-w>k
"nnoremap L <c-w>l

inoremap jk <esc>:w<cr>
inoremap wq <esc>:wq<cr>
inoremap qw <esc>:q!<cr>

"inoremap ( ()<esc>i
"inoremap \" \"\"<esc>i
"inoremap [ []<esc>i
"inoremap { {<esc>o<cr>}
"inoremap { {<esc>o}<esc>i<cr>

endif

4. 自动插入文件头

"定义函数 SetTitle, 自动插入文件头"
autocmd BufNewFile *.sh,*.pl,*.cc,*.cpp,*.c,*.py,*.java, exec ":call SetTitle()"
func SetTitle()
    if &filetype == 'sh'
        call setline(1,"\#!/bin/bash")
        call append(line(".")+0, "")
        call append(line(".")+1,"\##################################################################")
        call append(line(".")+2,"\# File Name: ".expand("%"))
        call append(line(".")+3, "\# Created Time: ".strftime("%c"))
        call append(line(".")+4, "\#")
        call append(line(".")+5, "\# Copyright (c) 2023, bash shell script from sustzc.")
        call append(line(".")+6, "\# All rights reserved.")
        call append(line(".")+7,"\##################################################################")
        call append(line(".")+8, "")
        call append(line(".")+9, "export LANG=en_US.UTF-8")
        call append(line(".")+10, "")
        call append(line(".")+11, "")
    elseif &filetype == 'perl'
        call setline(1,"\#!/usr/bin/perl -w")
        call append(line(".")+0, "")
        call append(line(".")+1,"\##################################################################")
        call append(line(".")+2,"\# File Name: ".expand("%"))
        call append(line(".")+3, "\# Created Time: ".strftime("%c"))
        call append(line(".")+4, "\#")
        call append(line(".")+5, "\# Copyright (c) 2023, perl script from sustzc.")
        call append(line(".")+6, "\# All rights reserved.")
        call append(line(".")+7,"\##################################################################")
        call append(line(".")+8, "")
        call append(line(".")+9, "")
    elseif &filetype == 'cpp'
        call setline(1,"\/\*")
        call append(line(".")+0, "\* File Name: ".expand("%"))
        call append(line(".")+1, "\* Created Time: ".strftime("%c"))
        call append(line(".")+2, "\*")
        call append(line(".")+3, "\* Copyright (c) 2023, c++ code from sustzc.")
        call append(line(".")+4, "\* All rights reserved.")
        call append(line(".")+5, "\*\/")
        call append(line(".")+6, "")
        call append(line(".")+7, "\//#include <iostream>")
        call append(line(".")+8, "\//#include <string>")
        call append(line(".")+9, "\//#include <algorithm>")
        call append(line(".")+10, "\#include <bits/stdc++.h>")
        call append(line(".")+11, "")
        call append(line(".")+12, "using namespace std;")
        call append(line(".")+13, "")
        call append(line(".")+14, "int main(void)")
        call append(line(".")+15,"\{")
        call append(line(".")+16, "")
        call append(line(".")+17, "    return 0;")
        call append(line(".")+18,"\}")
    elseif &filetype == 'c'
        call setline(1,"\/\*")
        call append(line(".")+0, "\* File Name: ".expand("%"))
        call append(line(".")+1, "\* Created Time: ".strftime("%c"))
        call append(line(".")+2, "\*")
        call append(line(".")+3, "\* Copyright (c) 2023, c code from sustzc.")
        call append(line(".")+4, "\* All rights reserved.")
        call append(line(".")+5, "\*\/")
        call append(line(".")+6, "")
        call append(line(".")+7, "\#include <stdio.h>")
        call append(line(".")+8, "\#include <stdlib.h>")
        call append(line(".")+9, "\#include <string.h>")
        call append(line(".")+10, "\#include <errno.h>")
        call append(line(".")+11, "\#include <unistd.h>")
        call append(line(".")+12, "\#include <sys/types.h>")
        call append(line(".")+13, "\#include <sys/stat.h>")
        call append(line(".")+14, "\#include <sys/mman.h>")
        call append(line(".")+15, "\#include <sys/wait.h>")
        call append(line(".")+16, "\#include <fcntl.h>")
        call append(line(".")+17, "\#include <pthread.h>")
        call append(line(".")+18, "\#include <dirent.h>")
        call append(line(".")+19, "\#include <semaphore.h>")
        call append(line(".")+20, "\#include <signal.h>")
        call append(line(".")+21, "\#include <sys/socket.h>")
        call append(line(".")+22, "\#include <arpa/inet.h>")
        call append(line(".")+23, "")
        call append(line(".")+24, "\#define SYS_ERR(MSG) do {            \\")
        call append(line(".")+25, "        perror(MSG);                 \\")
        call append(line(".")+26, "        exit(EXIT_FAILURE);          \\")
        call append(line(".")+27, "    } while(0)")
        call append(line(".")+28, "")
        call append(line(".")+29, "\#define ERROR_CHECK(x) do {          \\")
        call append(line(".")+30, "        if (-1 == (x)) {             \\")
        call append(line(".")+31, "            SYS_ERR(#x);             \\")
        call append(line(".")+32, "        }                            \\")
        call append(line(".")+33, "    } while(0)")
        call append(line(".")+34, "")
        call append(line(".")+35, "\#define ERROR_CHECK_MSG(x, MSG) do { \\")
        call append(line(".")+36, "        if (-1 == (x)) {             \\")
        call append(line(".")+37, "            SYS_ERR(MSG);            \\")
        call append(line(".")+38, "        }                            \\")
        call append(line(".")+39, "    } while(0)")
        call append(line(".")+40, "")
        call append(line(".")+41, "\#define HANDLER_ERR(MSG, EN) do {    \\")
        call append(line(".")+42, "        errno = EN;                  \\")
        call append(line(".")+43, "        fprintf(stderr, \"%s: %s\\n\",  \\")
        call append(line(".")+44, "            MSG, strerror(errno));   \\")
        call append(line(".")+45, "        exit(EXIT_FAILURE);          \\")
        call append(line(".")+46, "    } while(0)")
        call append(line(".")+47, "")
        call append(line(".")+48, "int main(int argc, char *argv[], char *envp[])")
        call append(line(".")+49,"\{")
        call append(line(".")+50, "")
        call append(line(".")+51, "    return 0;")
        call append(line(".")+52,"\}")
    elseif &filetype == 'python'
        call setline(1,"\#!/usr/bin/python -u")
        call append(line(".")+0,"\# -*- coding:utf-8 -*-")
        call append(line(".")+1, "")
        call append(line(".")+2,"\##################################################################")
        call append(line(".")+3,"\# File Name: ".expand("%"))
        call append(line(".")+4, "\# Created Time: ".strftime("%c"))
        call append(line(".")+5, "\#")
        call append(line(".")+6, "\# Copyright (c) 2023, python script from sustzc.")
        call append(line(".")+7, "\# All rights reserved.")
        call append(line(".")+8,"\##################################################################")
        call append(line(".")+9, "")
        call append(line(".")+10, "import os")
        call append(line(".")+11, "import sys")
        call append(line(".")+12, "")
        call append(line(".")+13, "if __name__ == '__main__':")
        call append(line(".")+14, "")
    elseif &filetype == 'java'
        call setline(1,"\/\*")
        call append(line(".")+0, "\* File Name: ".expand("%"))
        call append(line(".")+1, "\* Created Time: ".strftime("%c"))
        call append(line(".")+2, "\*")
        call append(line(".")+3, "\* Copyright (c) 2023, java code from sustzc.")
        call append(line(".")+4, "\* All rights reserved.")
        call append(line(".")+5, "\*\/")
        call append(line(".")+6, "")
    endif
endfunc
    "新建文件后, 自动定位到文件末尾"
    autocmd BufNewFile * normal G

"This is sustzc config"
if (1)
syntax on

set nu
set tabstop=4
set shiftwidth=4
set autoindent
set cindent
set smartindent
set showmatch
set backspace=2
set incsearch
set hlsearch

set cursorcolumn
set cursorline
highlight CursorLine   cterm=NONE ctermbg=darkred ctermfg=white guibg=NONE guifg=NONE
highlight CursorColumn cterm=NONE ctermbg=darkred ctermfg=white guibg=NONE guifg=NONE

set encoding=utf-8
"set fencs=gbk,gb2312,gb18030,cp936,utf-8,utf-bom,latin1
set fileencodings=utf-8,ucs-bom,latin1,gb2312,gb18030,cp936,gbk,big5
set termencoding=utf-8

"用于区分操作系统, 主要是回车 \r\n 的区别"
set fileformats=unix,dos

"与 Windows 共享剪贴板
set clipboard+=unnamed

"在状态行上显示光标所在位置的行号和列号
set ruler
set rulerformat=%20(%2*%<%f%=\ %m%r\ %3l\ %c\ %p%%%)

"在处理未保存或只读文件的时候, 弹出确认
set confirm

"nnoremap <F9> :set mouse-=a<cr>
"nnoremap <F10> : set mouse=a<cr>
"nnoremap <space>dm :set mouse-=a<cr>
"nnoremap <space>em :set mouse=a<cr>

"nnoremap H <c-w>h
"nnoremap J <c-w>j
"nnoremap K <c-w>k
"nnoremap L <c-w>l

inoremap jk <esc>:w<cr>
inoremap wq <esc>:wq<cr>
inoremap qw <esc>:q!<cr>

"inoremap ( ()<esc>i
"inoremap \" \"\"<esc>i
"inoremap [ []<esc>i
"inoremap { {<esc>o<cr>}
"inoremap { {<esc>o}<esc>i<cr>

endif

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值