注意vim,也可以说任何光标是基于字符的编辑器,当光标指向某个字符时,写入时其实是在其字符的前面开始写入的
zz
: 将当前行置于屏幕中间(不是转载…)
zt
: 将当前行置于屏幕顶端(不是猪头~)
zb
:底端啦~
shift+a也就是A
在本行尾写入并进入写入模式
shift+i / I
在本行首写入并进入写入模式
o / O
在本行的下行新建一行并进入写入模式 / 在本行的上行新建一行并进入写入模式
w
:把光标移动到下一个单词
<operation> <motion>
操作+动作,强大的功能!!!
删除操作d
:
d + →
:删除当前光标向右的第一个字符,删除左字符同理d + {数字,不如3} + →
:删除当前光标所在位置向右的三个字符,左同理dd
:删除整行(其实不是删除,是剪切操作,可通过p粘贴)复制操作y
:
y + →
:复制当前光标向右的第一个字符,向左复制字符同理y + {数字,不如3} + →
:复制当前光标所在位置向右的三个字符,左同理yy
:复制整行(其实不是删除,是剪切操作,可通过p粘贴)删除更改操作c
:
c + 6 + →
:删除当前光标向右的6个字符并进入写入模式
c + w
:直接删除光标所在的单词(但此时光标应在单词的第一个字符),并进入写入模式进行更改
c + i + w
:直接删除光标所在的单词(光标在单词的任意一个字符都可以),并进入写入模式进行更改
c + i + “/’
:删除“ ”/‘ ’
内的所有内容并进入写入模式
i 操作其实有可多,除了上面的和操作的配合,还有
y + i + w/'/"
:复制整个单词或引号里的内容d + i + w/'/"
:删除整个单词或引号里的内容
将光标移动到某个字符
f + 某个字符
:比如f+v
vim
就会找到这一行中的字符v
并把光标移动到字符v
d + f + 某个字符
:删除(剪切)光标到字符之间的内容y + f + 某个字符
:复制光标到字符之间的内容c + f + 某个字符
:删除光标到字符之间的内容,并进入写入模式进行更改可视块:
v
:小写v
,按一下后就可以通过移动光标选中按v
之前光标所在位置到移动光标之后的位置之间的内容V
:大写V
,shift+v
选中当前行,并可以通过上下选中其他行分屏:
:split+回车
:实现上下分屏:vsplit+回车
:实现左右分屏:e 文件路径
:打开一个新的文件ctrl+w+h/j/k/l
:实现光标的在不同窗口的移动map sh :set splitright<CR>:vsplit<CR> # 向右分屏并把光标移动到右边
map sl :set nosplitright<CR>:vsplit<CR> # 向右分屏并把光标移动到左边
map sj :set splitbelow<CR>:split<CR> # 向下分屏并把光标移动到下边
map sk :set nosplitbelow<CR>:split<CR> # 向下分屏并把光标移动到上边
map <LEADER>h <C-w>h " 空格+h 实现光标的向左的移动
map <LEADER>l <C-w>l " 空格+l 实现光标的向右的移动
map <LEADER>j <C-w>j " 空格+j 实现光标的向下的移动
map <LEADER>k <C-w>k " 空格+k 实现光标的向上的移动
map <up> :res +5<CR> # ↑ ↓ 实现上下分屏的大小
map <down> :res -5<CR> #
map <left> :vertical resize-5<CR> # ← → 实现左右分屏的大小
map <right> :vertical resize+5<CR> #
文件格式转换:
:%TOhtml
:把当前文件转为html
,%
当前文件的意思拼写检查:
:set spell
:打开拼写检查:set nospell
:关闭拼写检查[ ]
查看上一个或者下一个拼写错误z=
:假如有个词错了,把光标放在词的位置,按z=
他就会出现一堆选项让你选,回车确定就好(命令模式下)figlet
:
figlet 字符
# 他会生成字符的用符号拼凑的那种格式,想知道效果自己github吧,我对着不感兴趣
具体在哪里创建vim的配置文件,我现在还不了解,目前知道俩个位置
vimrc
文件,在里面进行编辑配置.vim
目录,在.vim
目录下创建vimrc
文件并进行配置let mapleader=" " # 将空格键替换Win键,<LEADER>对应Win键 配置的时候最好把它放在最上面
color elflord # 更换vim主题
noremap a b # 用a键替换b键,也就是vim会认为a就是b
map Q :q<CR> # 普通模式下用大写Q代替“冒号 q 回车”
map s <nop> # <nop>表示不进行任何操作
map R :source $MYVIMRC<CR> # 刷新文档,这样就不用保存退出来实现配置文件的生效
syntax on # 打开语法高亮
set number # 显示行号
set relativenumber # 这样就会显示当前行相对于整个文档的行号(标准行号),本行上下的内容显示相对于本行的位置,比如其下面第二行会显示2,上面第一行会显示1,适用于教学
set norelativenumber
set cursorline # 在本行显示一条下标线
set wrap # 不会使文本超出当前窗口的宽度,自动调整文本宽度
set showcmd # 这样就会在下面显示你敲了什么键
set wildmenu # 命令补全
set hlsearch # 高亮查找的内容
exec "nohlsearch" # 解决打开一个新文件还在高亮之前的搜索内容的问题
set incsearch # 边输入查找内容边高亮
set ignorecase # 忽略搜索的大小写
set smartcase # 智能搜索大小写
noremap <LEADER><CR> :nohlsearch<CR> # 空格+回车 实现取消查找高亮
set scrolloff=5 # 使用显示屏幕下面的5行
vim
插件的安装https://github.com/junegunn/vim-plug # Plug github地址
# Plug linux安装
curl -fLo ~/.vim/autoload/plug.vim --create-dirs \
https://raw.githubusercontent.com/junegunn/vim-plug/master/plug.vim
call plug#begin('~/.vim/plugged') # 扩号里是你的配置文件地址
Plug '插件github地址'
call plug#end()
:PlugInstall # 安装插件
:PlugUpdate # 更新插件
:PlugClean # 删除插件
:PlugUpgrade # 升级 Vim-plug
# 审查插件
有时,更新的插件可能有新的 bug 或无法正常工作。要解决这个问题,你可以简单地回滚有问题的插件。输入 :PlugDiff 命令,然后按回车键查看上次 :PlugUpdate的更改,并在每个段落上按 X将每个插件回滚到更新前的前一个状态。
" 下面五行是为了让vim更好的额适配插件
set nocompatible
filetype on
filetype indent on
filetype plugin on
filetype plugin indent on
set encoding=utf-8
" 将空格键替换Win键,<LEADER>对应Win键 配置的时候最好把它放在最上面
let mapleader=" "
" 更换vim主题
color elflord
" 刷新文档,这样就不用保存退出来实现配置文件的生效
map R :source $MYVIMRC<CR>
" 打开语法高亮
syntax on
" 显示行号
set number
" 这样就会显示当前行相对于整个文档的行号(标准行号),本行上下的内容显示相对于本行的位置,比如其下面第二行会显示2,上面第一行会显示1,适用于教学
set relativenumber
" set norelativenumber
" 在本行显示一条下标线
set cursorline
" 不会使文本超出当前窗口的宽度,自动调整文本宽度
set wrap
" 命令补全
set wildmenu
" 始终显示屏幕下面的n行
set scrolloff=10
" 高亮查找的内容
set hlsearch
" 解决打开一个新文件还在高亮之前的搜索内容的问题
" exec "nohlsearch"
" 边输入查找内容边高亮
set incsearch
" 忽略搜索的大小写
set ignorecase
" 智能搜索大小写
set smartcase
" 空格+回车 实现取消查找高亮
noremap <LEADER><CR> :nohlsearch<CR>
" 空格+h 实现光标的向左的移动
map <LEADER>h <C-w>h
" 空格+l 实现光标的向右的移动
map <LEADER>l <C-w>l
" 空格+j 实现光标的向下的移动
map <LEADER>j <C-w>j
" 空格+k 实现光标的向上的移动
map <LEADER>k <C-w>k
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'preservim/nerdtree'
" Plug 'ycm-core/YouCompleteMe'
call plug#end()
map tt :NERDTree<CR>
下面的配置来自zheli !
colorscheme blackboard " 着色模式:蓝色背景
set guifont=Monaco:h10 " 字体 && 字号
"set guifont=Courier_New:h12 " 字体 && 字号
set tabstop=4 " 设置tab键的宽度
set shiftwidth=4 " 换行时行间交错使用4个空格
set autoindent " 自动对齐
set backspace=2 " 设置退格键可用
set cindent shiftwidth=4 " 自动缩进4空格
set smartindent " 智能自动缩进
set ai! " 设置自动缩进
set nu! " 显示行号
"set showmatch " 显示括号配对情况
set mouse=a " 启用鼠标
set ruler " 右下角显示光标位置的状态行
set incsearch " 开启实时搜索功能
set hlsearch " 开启高亮显示结果
set nowrapscan " 搜索到文件两端时不重新搜索
set nocompatible " 关闭兼容模式
set vb t_vb= " 关闭提示音
set cursorline " 突出显示当前行
set hidden " 允许在有未保存的修改时切换缓冲区
set list " 显示Tab符,使用一高亮竖线代替
set listchars=tab:\|\ ,
syntax enable " 打开语法高亮
syntax on " 开启文件类型侦测
filetype indent on " 针对不同的文件类型采用不同的缩进格式
filetype plugin on " 针对不同的文件类型加载对应的插件
filetype plugin indent on " 启用自动补全
if has("gui_running")
au GUIEnter * simalt ~x " 窗口启动时自动最大化
"winpos 20 20 " 指定窗口出现的位置,坐标原点在屏幕左上角
"set lines=20 columns=90 " 指定窗口大小,lines为高度,columns为宽度
"set guioptions-=m " 隐藏菜单栏
"set guioptions-=T " 隐藏工具栏
"set guioptions-=L " 隐藏左侧滚动条
"set guioptions-=r " 隐藏右侧滚动条
"set guioptions-=b " 隐藏底部滚动条
"set showtabline=0 " 隐藏Tab栏
endif
set writebackup " 设置无备份文件
set nobackup
set autochdir " 设定文件浏览器目录为当前目录
"set nowrap " 设置不自动换行
set foldmethod=syntax " 选择代码折叠类型
set foldlevel=100 " 禁止自动折叠
set laststatus=2 " 开启状态栏信息
set cmdheight=2 " 命令行的高度,默认为1,这里设为2
" 每行超过80个的字符用下划线标示
au BufRead,BufNewFile *.s,*.h,*.c,*.cpp,*.cc,*.java,*.erl,*.sh,*.vim,*.js,*.xml,*.html,*.xhtml 2match Underlined /.\%81v/
" 设置编码
set fenc=utf-8
set encoding=utf-8
set fileencodings=utf-8,gbk,cp936,latin-1
" 解决菜单乱码
source $VIMRUNTIME/delmenu.vim
source $VIMRUNTIME/menu.vim
" 解决consle输出乱码
language messages zh_CN.utf-8
" For Haskell
:let hs_highlight_delimiters=1 " 高亮定界符
:let hs_highlight_boolean=1 " 把True和False识别为关键字
:let hs_highlight_types=1 " 把基本类型的名字识别为关键字
:let hs_highlight_more_types=1 " 把更多常用类型识别为关键字
:let hs_highlight_debug=1 " 高亮调试函数的名字
:let hs_allow_hash_operator=1 " 阻止把#高亮为错误
" ======= 引号 && 括号自动匹配 ======= "
:inoremap ( ()<ESC>i
:inoremap ) <c-r>=ClosePair(')')<CR>
:inoremap { {}<ESC>i
:inoremap } <c-r>=ClosePair('}')<CR>
:inoremap [ []<ESC>i
:inoremap ] <c-r>=ClosePair(']')<CR>
":inoremap < <><ESC>i
":inoremap > <c-r>=ClosePair('>')<CR>
:inoremap " ""<ESC>i
:inoremap ' ''<ESC>i
:inoremap ` ``<ESC>i
function ClosePair(char)
if getline('.')[col('.') - 1] == a:char
return "\<Right>"
else
return a:char
endif
endf
" MiniBufExplorer 多个文件切换 可使用鼠标双击相应文件名进行切换
let g:miniBufExplMapWindowNavVim=1
let g:miniBufExplMapWindowNavArrows=1
let g:miniBufExplMapCTabSwitchBufs=1
let g:miniBufExplModSelTarget=1
" :Tlist 调用TagList
let Tlist_Show_One_File=1 " 只显示当前文件的tags
let Tlist_Exit_OnlyWindow=1 " 如果Taglist窗口是最后一个窗口则退出Vim
let Tlist_Use_Right_Window=1 " 在右侧窗口中显示
let Tlist_File_Fold_Auto_Close=1 " 自动折叠
" TxtBrowser 高亮TXT文本文件
au BufRead,BufNewFile *.txt setlocal ft=txt
下面的配置文件来自Up主TheCW
视频链接:
GitHub地址:这里!
他的配置我有的没有用,仅供参考
let mapleader=" "
syntax on
set number
set norelativenumber
set cursorline
set wrap
set showcmd
set wildmenu
set hlsearch
exec "nohlsearch"
set incsearch
set ignorecase
set smartcase
set nocompatible # 下面五行是为了让vim更好的额适配插件
filetype on
filetype indent on
filetype plugin on
filetype plugin indent on
set mouse=a # 可以使用鼠标,一般不使用
set encoding=utf-8 # 编码格式
let &t_ut='' # 解决终端颜色配置的一些问题
set expandtab # 以下四行更改缩进的长度
set tabstop=2
set shiftwidth=2
set softtabstop=2
set list # 显示空格
set listchars=tab:▸\ ,trail:▫
set scrolloff=5
set tw=0
set indentexpr=
set backspace=indent,eol,start # 退格键 实现光标移动到行尾
set foldmethod=indent # 收代码
set foldlevel=99
let &t_SI = "\<Esc>]50;CursorShape=1\x7" # 以下三行可以使vim的光标在普通模式和写入模式下有不同的光标样式
let &t_SR = "\<Esc>]50;CursorShape=2\x7"
let &t_EI = "\<Esc>]50;CursorShape=0\x7"
set laststatus=2
set autochdir # 可以在当前文件下执行你要执行的命令
au BufReadPost * if line("'\"") > 1 && line("'\"") <= line("$") | exe "normal! g'\"" | endif # 让光标放在你上次编辑文件的位置
noremap = nzz #
noremap - Nzz
noremap <LEADER><CR> :nohlsearch<CR>
noremap n h
noremap u k
noremap e j
noremap i l
noremap U 5k
noremap E 5j
noremap N 7h
noremap I 7l
" N key: go to the start of the line
noremap <C-n> 0
" I key: go to the end of the line
noremap <C-i> $
noremap k i
noremap K I
noremap l u
map s <nop>
map S :w<CR>
map Q :q<CR>
map R :source $MYVIMRC<CR>
map ; :
map si :set splitright<CR>:vsplit<CR>
map sn :set nosplitright<CR>:vsplit<CR>
map su :set nosplitbelow<CR>:split<CR>
map se :set splitbelow<CR>:split<CR>
map <LEADER>i <C-w>l
map <LEADER>u <C-w>k
map <LEADER>n <C-w>h
map <LEADER>e <C-w>j
map <up> :res +5<CR>
map <down> :res -5<CR>
map <left> :vertical resize-5<CR>
map <right> :vertical resize+5<CR>
map tu :tabe<CR>
map tn :-tabnext<CR>
map ti :+tabnext<CR>
map sv <C-w>t<C-w>H
map sh <C-w>t<C-w>K
call plug#begin('~/.vim/plugged')
Plug 'vim-airline/vim-airline'
Plug 'connorholyday/vim-snazzy'
" File navigation
Plug 'scrooloose/nerdtree', { 'on': 'NERDTreeToggle' } # 在vim窗口的左边显示文件树
Plug 'Xuyuanp/nerdtree-git-plugin'
" Taglist
Plug 'majutsushi/tagbar', { 'on': 'TagbarOpenAutoClose' }
" Error checking
Plug 'w0rp/ale'
" Auto Complete
Plug 'Valloric/YouCompleteMe' # 代码补全
'''
还需要手动安装一下 才可以使用
cd ~/.vim/plugged/YoucompleteMe/
sudo python3 install.py
installing.....
'''
" Undo Tree
Plug 'mbbill/undotree/' # 以树形的方式浏览文件的修改历史
" Other visual enhancement
Plug 'nathanaelkane/vim-indent-guides'
Plug 'itchyny/vim-cursorword'
" Git
Plug 'rhysd/conflict-marker.vim'
Plug 'tpope/vim-fugitive'
Plug 'mhinz/vim-signify'
Plug 'gisphm/vim-gitignore', { 'for': ['gitignore', 'vim-plug'] }
" HTML, CSS, JavaScript, PHP, JSON, etc.
Plug 'elzr/vim-json'
Plug 'hail2u/vim-css3-syntax'
Plug 'spf13/PIV', { 'for' :['php', 'vim-plug'] }
Plug 'gko/vim-coloresque', { 'for': ['vim-plug', 'php', 'html', 'javascript', 'css', 'less'] }
Plug 'pangloss/vim-javascript', { 'for' :['javascript', 'vim-plug'] }
Plug 'mattn/emmet-vim'
" Python
Plug 'vim-scripts/indentpython.vim'
" Markdown
Plug 'iamcco/markdown-preview.nvim', { 'do': { -> mkdp#util#install_sync() }, 'for' :['markdown', 'vim-plug'] }
Plug 'dhruvasagar/vim-table-mode', { 'on': 'TableModeToggle' }
Plug 'vimwiki/vimwiki'
" Bookmarks
Plug 'kshenoy/vim-signature'
" Other useful utilities
Plug 'terryma/vim-multiple-cursors'
Plug 'junegunn/goyo.vim' " distraction free writing mode
Plug 'tpope/vim-surround' " type ysks' to wrap the word with '' or type cs'` to change 'word' to `word`
Plug 'godlygeek/tabular' " type ;Tabularize /= to align the =
Plug 'gcmt/wildfire.vim' " in Visual mode, type i' to select all text in '', or type i) i] i} ip
Plug 'scrooloose/nerdcommenter' " in <space>cc to comment a line
" Dependencies
Plug 'MarcWeber/vim-addon-mw-utils'
Plug 'kana/vim-textobj-user'
Plug 'fadein/vim-FIGlet'
call plug#end()
let g:SnazzyTransparent = 1
color snazzy
" ===
" === NERDTree
" ===
map tt :NERDTreeToggle<CR> # 文件树的一些配置
let NERDTreeMapOpenExpl = ""
let NERDTreeMapUpdir = ""
let NERDTreeMapUpdirKeepOpen = "l"
let NERDTreeMapOpenSplit = ""
let NERDTreeOpenVSplit = ""
let NERDTreeMapActivateNode = "i"
let NERDTreeMapOpenInTab = "o"
let NERDTreeMapPreview = ""
let NERDTreeMapCloseDir = "n"
let NERDTreeMapChangeRoot = "y"
" ==
" == NERDTree-git
" ==
let g:NERDTreeIndicatorMapCustom = {
\ "Modified" : "✹",
\ "Staged" : "✚",
\ "Untracked" : "✭",
\ "Renamed" : "➜",
\ "Unmerged" : "═",
\ "Deleted" : "✖",
\ "Dirty" : "✗",
\ "Clean" : "✔︎",
\ "Unknown" : "?"
\ }
" ===
" === You Complete ME
" ===
nnoremap gd :YcmCompleter GoToDefinitionElseDeclaration<CR>
nnoremap g/ :YcmCompleter GetDoc<CR>
nnoremap gt :YcmCompleter GetType<CR>
nnoremap gr :YcmCompleter GoToReferences<CR>
let g:ycm_autoclose_preview_window_after_completion=0
let g:ycm_autoclose_preview_window_after_insertion=1
let g:ycm_use_clangd = 0
let g:ycm_python_interpreter_path = "/bin/python3"
let g:ycm_python_binary_path = "/bin/python3"
" ===
" === ale
" ===
let b:ale_linters = ['pylint']
let b:ale_fixers = ['autopep8', 'yapf']
" ===
" === Taglist
" ===
map <silent> T :TagbarOpenAutoClose<CR>
" ===
" === MarkdownPreview
" ===
let g:mkdp_auto_start = 0
let g:mkdp_auto_close = 1
let g:mkdp_refresh_slow = 0
let g:mkdp_command_for_global = 0
let g:mkdp_open_to_the_world = 0
let g:mkdp_open_ip = ''
let g:mkdp_browser = 'chromium'
let g:mkdp_echo_preview_url = 0
let g:mkdp_browserfunc = ''
let g:mkdp_preview_options = {
\ 'mkit': {},
\ 'katex': {},
\ 'uml': {},
\ 'maid': {},
\ 'disable_sync_scroll': 0,
\ 'sync_scroll_type': 'middle',
\ 'hide_yaml_meta': 1
\ }
let g:mkdp_markdown_css = ''
let g:mkdp_highlight_css = ''
let g:mkdp_port = ''
let g:mkdp_page_title = '「${name}」'
" ===
" === vim-table-mode
" ===
map <LEADER>tm :TableModeToggle<CR>
" ===
" === Python-syntax
" ===
let g:python_highlight_all = 1
" let g:python_slow_sync = 0
" ===
" === vim-indent-guide
" ===
let g:indent_guides_guide_size = 1
let g:indent_guides_start_level = 2
let g:indent_guides_enable_on_vim_startup = 1
let g:indent_guides_color_change_percent = 1
silent! unmap <LEADER>ig
autocmd WinEnter * silent! unmap <LEADER>ig
" ===
" === Goyo
" ===
map <LEADER>gy :Goyo<CR>
" ===
" === vim-signiture
" ===
let g:SignatureMap = {
\ 'Leader' : "m",
\ 'PlaceNextMark' : "m,",
\ 'ToggleMarkAtLine' : "m.",
\ 'PurgeMarksAtLine' : "dm-",
\ 'DeleteMark' : "dm",
\ 'PurgeMarks' : "dm/",
\ 'PurgeMarkers' : "dm?",
\ 'GotoNextLineAlpha' : "m<LEADER>",
\ 'GotoPrevLineAlpha' : "",
\ 'GotoNextSpotAlpha' : "m<LEADER>",
\ 'GotoPrevSpotAlpha' : "",
\ 'GotoNextLineByPos' : "",
\ 'GotoPrevLineByPos' : "",
\ 'GotoNextSpotByPos' : "mn",
\ 'GotoPrevSpotByPos' : "mp",
\ 'GotoNextMarker' : "",
\ 'GotoPrevMarker' : "",
\ 'GotoNextMarkerAny' : "",
\ 'GotoPrevMarkerAny' : "",
\ 'ListLocalMarks' : "m/",
\ 'ListLocalMarkers' : "m?"
\ }
" ===
" === Undotree
" ===
let g:undotree_DiffAutoOpen = 0
map L :UndotreeToggle<CR>