NOTE-vim

NOTE - vim Editor basic operation

basic

工作模式 :

command mode : Esc, 任何输入都为命令
insert mode : 快捷键均无效,仅可编辑文件
i : 从光标以左插入
a : 从光标以右插入 可在行尾字符和换行符之间插入
Shift + a : 跳转到本行末尾插入字符
o : 在本行之下开辟一行插入字符
Shift + o : 在本行之上开辟一行插入字符
command-line mode : command mode + : 输入命令
Ex mode : command mode + Q : 输入多行命令. 此模式下输入visual回到normal mode
visual mode : v
visual-block mode : <Ctrl - q>
visual-line mode : Shift +v
select mode : gh 相当于word中选中内容,再键入内容将直接替换

打开文件 :

vi DIR or vim DIR
若DIR不存在,则编辑新文件 ; 若DIR存在,则编辑已有文件

方向操作hjkl

h:left l:right j:down k:up (in command mode)
<number><direction>:往direction移动number个字符/行

.vim/vimrc configuration

path : ~/.vim/vimrc

syntax on/off : 开启/关闭高亮
set [no][function] : 开启funtion,在function前接上no则为禁用该function
map [A] [B] : 将A映射到B
noremap [A] [B] : 将A映射到B
inoremap [A] [B] : 仅在insert mode生效的noremap
vnoremap [A] [B] : 仅在visual mode生效的noremap
nnoremap [A] [B] : 仅在normal mode生效的noremap
let mapleader="[A]" : 定义LEADER键

部分常用function

number : 显示行号
relativenumber : 显示相对行号
cursorline : 光标所在行显示下划线
wrap : 自动换行使一行不超出窗口范围
wildmenu : command line mode下按Tab显示当前可用的命令. **此时若进行命令选择只能用方向键,hjkl不可用
hlsearch : 搜索内容高亮
incsearch : 动态高亮搜索内容
ignorecase : 忽略大小写搜索
smartcase : 智能决定是否忽略大小写,适用于ABC与AbC这种大小写混合字符的精准搜索

map & noremap区别 :

map : 递归地映射
noremap : 不递归地映射
for example :

map a b
map b c
'a' → 'c'

noremap a b
noremap b c
'a' → 'b'

一些motion(如果没有与其他键位冲突时在command mode下可以独立使用)

w : 将光标左侧移动到下一个词的开头
搭配c即删除从光标左侧开始的所在词语的全部内容. 注意:任何语言的词语定义为符号之间的全部内容(空格算内容不算符号),若光标左侧不在单词左侧,则删除不完整.
b : 将光标左侧移动到本词的开头或者上一个词的开头
i : 在...中, 搭配w使用(ciw)则实现光标在词语里面时删除本词语全部内容
G : 光标移动至最后一行
gg : 光标移动到第一行

分屏

分屏方向

:split 上下分屏
:vsplit 左右分屏
:q 退出分屏
:set splitright<CR>:vsplit<CR> 向右分屏
:set nosplitright<CR>:vsplit<CR> 向左分屏
:set splitbelow<CR>:split<CR> 向下分屏
:set nosplitbelow<CR>:split<CR> 向上分屏
<Ctrl - w> + h/j/k/l 光标移动至对应分屏

打开文件

:e FILEPATH or :edit FILEPATH 打开新文件

更改分屏

:res +/- [number] 更改光标所在的上下分屏上下大小
:vertical resize +/- [number] 更改光标所在的左右分屏大小
<Ctrl - w>t<Ctrl - w>H 上下分屏改左右分屏
<Ctrl - w>t<Ctrl - w>K 左右分屏改上下分屏

标签页

:tabe 打开新标签页
:q 关闭此标签页
:-tabnext 移至左标签页
:+tabnext 移至右标签页

visual mode

所有visual模式下:
选中后,键入:normal [command] 将会对选中内容在normal模式下批量应用[command]内容

visual-block mode :
选中后,键入I,再输入内容后Esc,会在选中内容之前同意插入键入内容

command

format of command : <operation><motion>

x : 删除光标所选字符

d : 剪切

d<number><direction> 此处direction为方向键的上下左右,下面用<left/right/up/down>表示
选取范围
在direction为left/right时,光标起始位置相当于块状光标左边边缘
在direction为up/down时,选取范围为本行加上上下 <number>行
即 : 假设<>为块状光标覆盖位置,|为Windows下常见的编辑光标

e.g.
d5<left> : 剪切光标左边5个字符
d1<up> : 剪切本行及上一行
d<up> : 等同d1<up>
dd : 剪切本行

p : 粘贴

粘贴行时,VIM会在光标所在行下一行(无则新建)进行粘贴
粘贴所选内容且内容非整行复制或剪切时,从光标右侧边缘开始粘贴

y : 复制

选取范围与d相同

c : 替换

选取范围与d相同
删除选取范围内字符并进入insert mode
i : 在...中
搭配w使用(ciw)则实现光标在词语里面时删除本词语全部内容
搭配指定符号实现删除符号之间全部内容
e.g. original text : "text1 text7 [text2 text3] <text4 text5> text6"
"text1| text7 [text2 text3] <text4 text5> text6" ci" →""
"text1 text7 [text2 t|ext3] <text4 text5> text6" ci[ or ci] → "text1 text7 [] <text4 text5> text6"
"text1 text7 [text2 text3] <text4 |text5> text6" ci< or ci> → "text1 text7 [text2 text3] <> text6"

f : 查找

f<character> : 光标左侧移动到<character>所在位置, 配合d y c则为从光标字符开始选取至下一处<character>(包含)再执行dyc对应操作

/ : 查找

command mode下使用
n : 下一处内容
N : 上一处内容
zz : 光标位置变为窗口中心

插件

VIM Plugin Manager

https://github.com/junegunn/vim-plug

安装插件

vimrc configuration:

call plug#begin()
Plug 'plugin1'
Plug 'plugin2'
...
call plug#end()

reload vimrc and :PlugInstall

posted @ 2023-02-05 18:14  CINKUK  阅读(8)  评论(0)    收藏  举报