Vim:将 map 转换为命令

标签 vim

我想转换this map命令。我尝试过“显而易见”,将 map 行的命令部分复制到 command 行:

command SortWords d:execute 'normal i' . join(sort(split(getreg('"'))), ' ')<CR>

但是,当将其与选定的文本一起使用时,它会失败并显示“E481:不允许范围”。我的 Google-fu 不够强大,而且手册是......计算机可以解析的,比如说。

最佳答案

command! -nargs=0 -range SortWords exe 'norm! gvd'|call setreg('"', join(sort(split(@")), ' '), visualmode()[0])|norm! P

该命令是脏命令,因为它破坏了未命名的寄存器。

为了避免这种情况,您必须保存寄存器并在完成后恢复它。最好的方法是使用函数。

command! -nargs=0 -range SortWords call VisualSortWords()

function! VisualSortWords()
  let rv = @"
  let rt = getregtype('"')
  try
    norm! gvy
    call setreg('"', join(sort(split(@")), ' '), visualmode()[0])
    norm! `>pgvd
  finally
    call setreg('"', rv, rt)
  endtry
endfunction

关于Vim:将 map 转换为命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7415644/

相关文章:

vim - gvim将下划线显示为空格

vim - 在可视模式下在行首粘贴数据

c - vim :make to compile and run C code if it's a success

linux - 如何重新映射 key : to go in vim command-line mode?

Vim:根据缩进/控制流深度改变颜色?

vim - 使 vimscript bang 命令解释 vim 变量

Vim 删除多个单词

vim - 如何在 Vim CtrlP 中自定义线条高亮颜色?

vim如何折叠一个html标签

Ubuntu:如何将文本从在 ssh 上运行 vim 的终端复制到本地剪贴板