我试图在vim中创建一个简单的地图,让z
键插入4个空格。我有
map z 4i <esc>l
如果我输入z
,它会按预期工作。即使多次键入z
也可按预期工作。但是当我使用类似2z
的内容时,它会插入24个空格,1z
会插入14个空格。每次我尝试使用中继器时,它会插入10倍的中继器空间,然后再插入4个空格。
我的地图有问题吗?我希望2z
插入8个空格,3z
插入12个空格,依此类推。
编辑:
@ merlin2011弄清楚为什么我的映射行为不端并提出了解决问题的方法。
@PeterRincker正确地推断出地图的意图是缩进。使用>>
的建议优于使用.vimrc
次修改的映射:
set expandtab
set tabstop=4
set softtabstop=4
set shiftwidth=4
以上选项使我无需重新映射任何密钥,并充分利用已经正常运行的>
,<
,>>
,<<
命令。我认为这是解决问题的更好方法。
答案 0 :(得分:5)
当您在映射命令前放置一个数字时,就好像您在数字后面紧接着输入了map命令一样。
特别是,您的命令2z
变为24i <esc>l
,这将为您提供24个空格。
:help map-examples
中记录了此行为。
一种解决方法是在映射中使用4个文字空间。
map z i <Esc>l
另一种方法是使用函数并使用映射调用函数。
function! Insert(m)
let l:count = a:m*4
execute "normal a" . repeat (" ", l:count)
endfunction
map z :<C-U>call Insert(v:count1)<CR>
有关此问题的参考,请参阅this page。
答案 1 :(得分:0)
看起来这个映射是为了缩进。我们最好使用Vim的本机压缩命令:
>>
向右移动<<
向左移动>
/ <
移动视觉选择常见错误是在'shiftwidth'
文件中设置~/.vimrc
等缓冲区本地选项。最好按文件类型设置这些,并在设置这些选项时使用setlocal
。通过以下方式获取缓冲区的文件类型::set filetype?
E.g。假设文件类型为javascript
,则将以下内容添加到~/.vim/after/ftplugins/javascript.vim
:
setlocal shiftwidth = 4
查看sleuth.vim以自动调整缩进设置也是值得的。
要了解详情,请参阅以下内容:
:h :setl
:h options
:h after-directory
:h >>
:h 'shiftwidth'