使用mswin在vim中设置文本块

使用mswin在vim中设置文本块,vim,Vim,我将vim与mswin()一起使用,这样我就可以以常见的方式使用control-C、X、V、Z、Y、A、S 但是,我想在选定文本块的每一行添加选项卡(\t)。我可以使用以下vim功能代码执行此操作: function Tabs () :'<,'>s/^/\t/g :noh " to remove highlighting endfunction 这是可行的,但我必须做很多步骤。甚至“:Tabs()”也不起作用。我可以将其绑定到选项卡键或任何其他

我将vim与mswin()一起使用,这样我就可以以常见的方式使用control-C、X、V、Z、Y、A、S

但是,我想在选定文本块的每一行添加选项卡(
\t
)。我可以使用以下vim功能代码执行此操作:

function Tabs ()  
  :'<,'>s/^/\t/g
  :noh              " to remove highlighting
endfunction

这是可行的,但我必须做很多步骤。甚至“
:Tabs()
”也不起作用。我可以将其绑定到
选项卡
键或任何其他键以便于使用吗?

您可以同时执行这两项操作。最好使函数范围具有感知性(
:help:function
:help-func-range
:help:execute
)。此外,Vimscript文件中不需要冒号;并且每行不能多次替换一行的开头,所以
/g
修饰符是无用的。我还使用
:函数
而不是
:函数
,以确保在重新加载定义的文件时不会引发错误

function! Tabs() range
  exec a:firstline.",".a:lastline."s/^/\t"
  noh
endfunction
正如您所说,函数是使用
calltabs()
语法(
:help:call
)调用的<代码>:选项卡
将是一个命令,您可以通过以下方式创建新命令。(
:help:command
:help commmand range
:help line1
:help line2


在这里,我们依赖于这样一个事实:在视觉模式下按
,不仅会使您进入命令模式,而且还会插入
“为什么不简单地
>
?@romainl:只有一个
有效。你为什么写
>
?早上好。谢谢你的详细回答。我只能使用一次
。要向同一块添加另一个选项卡,我必须再次按
control-Q,选择block并按>
。有没有可能,一旦开始,我可以重复按>和<键以获得文本块的正确制表符(就像我在Geany text editor中使用制表符和Shift制表符时所做的那样)?这里不是一种方法,而是三种方法:a)在视觉模式下,
3>
将缩进三次(
:help v
),您可以使用
重新应用缩进(
:help.
)c)您可以使用
gv
:help gv
)重新选择最后一个视觉选择以进行进一步操作。我通常使用b)如果我不知道确切的计数-如果我需要应用四个缩进,我将选择一个块,然后
。如果缩进太多,我可以使用
u
:help undo
)返回。我还发现
..
用于制表,而
u
用于撤销效果最好。这些移动可以使用Tab和Shift Tab来完成吗?您可以将一些逻辑绑定到
,但这并不十分简单。我强烈建议您适应Vim,而不是尝试让Vim适应您。Vim非常固执己见,如果你想使用Windows风格的编辑器,最好使用一个真正的编辑器(比如记事本++),而不是试图将一个方形的钉子敲入一个圆形的孔中。即使是视觉模式,新Vimmers也会过度使用,因为文本对象通常提供更直观、更强大的操作方式,如果您坚持使用习惯的“安全”方式,这一点就不明显了。
function! Tabs() range
  exec a:firstline.",".a:lastline."s/^/\t"
  noh
endfunction
command! -range Tabs <line1>,<line2>call Tabs()
vnoremap <Tab> :call Tabs()<CR>