我正在使用带有mswin(http://ftp.nluug.nl/vim/runtime/mswin.vim)的vim,这样我就可以以通用方式使用control-C,X,V,Z,Y,A,S。
但是,我想在所选文本块的每一行添加标签(\t
)。我可以使用以下vim函数代码来实现:
function Tabs ()
:'<,'>s/^/\t/g
:noh " to remove highlighting
endfunction
用法如下:
Press ESC > ctrl-Q > select block > :call Tabs()
它有效,但我必须做很多步骤。甚至&#34; :Tabs()
&#34;不起作用。我可以将其绑定到Tab
密钥或任何其他密钥以便于使用吗?
答案 0 :(得分:0)
你可以做到这两点。最好使函数范围感知(:help :function
,:help func-range
,:help :execute
)。此外,您不需要Vimscript文件中的冒号;并且每行不能多次替换行的开头,因此/g
修饰符是无用的。我还使用:function!
而不是:function
来确保如果您重新加载定义它的文件,则不会引发错误。
function! Tabs() range
exec a:firstline.",".a:lastline."s/^/\t"
noh
endfunction
正如您所说,使用call Tabs()
语法(:help :call
)调用函数。 :Tabs
将是命令,您可以通过以下方式创建新命令。 (:help :command
,:help commmand-range
,:help line1
,:help line2
)。
command! -range Tabs <line1>,<line2>call Tabs()
您还可以将其设置为键盘映射。 (:help :vnoremap
)。
vnoremap <Tab> :call Tabs()<CR>
我们依赖这样一个事实:在可视模式下按:
不仅会使您进入命令模式,还会将'<,'>
范围插入命令行(以便绑定实际调用{{ 1}})。 (:'<,'>call Tabs()
,:help cmdline-ranges
,:help '<
)
但是,如果您只想在块中添加缩进,那么只需在可视模式下按:help '>
(>
)。如果您的文件是缩进的(即您的选项是:help >
或tabstop等于shiftwidth的任何其他设置),它将在行的开头插入制表符。 (set noexpandtab tabstop=8 shiftwidth=8
,:help :set
,:help 'expandtab'
,:help 'tabstop'
)如果您的选项为:help 'shiftwidth'
(表示您希望使用空格缩进,而不是标签),那么{{ 1}}将缩进等于shiftwidth的空格数。
像往常一样,您可以将命令加倍以使其缩进当前行(set expandtab
),或者应用文本对象(例如>
缩进段落),等等。绑定,>>
,这些人(同样根据相关选项)。