使用mswin在vim中选中一个文本块

时间:2017-04-24 02:34:10

标签: vim

我正在使用带有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密钥或任何其他密钥以便于使用吗?

1 个答案:

答案 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),或者应用文本对象(例如>缩进段落),等等。绑定,>>,这些人(同样根据相关选项)。