更改列表,:changes显示,是更改的位置列表,可用g;和g,浏览.
g+和g-用于撤销列表.可用:undolist显示它.
vim默认关闭永久会话列表.用set undofile来打开.
你部分原因是,@/在函数结束时恢复了.见:help function-search-undo,可从函数中用return searchTerm,并用
autocmd CursorMoved * let @/ = HighlightVisual(mode())
在set hls后,要用redraw.因为有时,不重画.
y强制了普通模式,而gv移动光标,导致函数内触发autocmd CursorMoved,因而无穷循环.
我在函数头尾设置并恢复set eventignore=CursorMoved.
function! HighlightVisual(mode)
//自动突出显示当前视觉选择的所有匹配项
if mode()=~#"^[vV\<C-v>]"
set eventignore=CursorMoved
normal "hy
"保存在h中.
normal gv
let searchTerm = '\V'.substitute(escape(@h, '\/'), "\n", '\\n', "g")
let @/ = searchTerm
call histadd("search", searchTerm)
set hls
redraw
set eventignore=""
endif
endfunction
autocmd CursorMoved * :call HighlightVisual(mode())
vnoremap <silent> <ESC> :<C-u>set nohlsearch<CR>
:help zip,加vim至zip中.
:execute "e $HOME/foo/bar/target-" . strftime("%Y-%m-%d") . ".txt"
可用:command!创建命令,或nnoremap <C-s>映射键.
^[为C-v-esc,而^I为C-v-tab.
export MANPAGER="vim -M +MANPAGER -c 'syntax off' -"
//-c额外配置.
系统:
let [w, h] = system("xrandr --query | grep ' connected primary'")->
matchlist('\d\+x\d\+')[0]->
split('x')->
map({_, v -> str2nr(v)})
vim9读寄存器:
vim9script
def ReadReg(file: string)
readfile(file)->mapnew((_, line) => {
var [reg, content] = split(line, ': ')
execute $'@{reg} = {content}'
})
/\<cat\>,/\v<cat>,\v可减少<>+()的转义.
:%s/\S\+\s*$/\l&/,匹配非空格,
:%norm!$Bgul
调整文件类型设置:
" ~/.vim/after/ftplugin/text.vim"
setlocal formatoptions-=t
" 不要忘了调整b:undo_ftplugin"
组外的autocmd!删除所有非组内(默认组)的自动命令.
autocmd! BufWrite * :echom "Cats"
删除所有未归组的BufWrite *,并加单个:echom "Cats"命令.
autocmd中从BufWrite改为BufWritePost时,空的autocmd!会删除BufWrite,并保留BufWritePost.而特定事件或命令的autocmd!会保留BufWrite/BufWritePost.它仅删匹配的BufWritePost.
:nnoremap cd /\d\+<enter>cgn
//修改数字.
位置列表是窗口本地快速修复列表










