在Vim中,是否有一种方法可以在一行中水平移动对象/运动(文字、字符、视觉选择等),并在其周围移动字符?

在Vim中,是否有一种方法可以在一行中水平移动对象/运动(文字、字符、视觉选择等),并在其周围移动字符?,vim,Vim,例如,我有以下几行: object => "plaintext", 我想将单词“object”移到右边(因此它离“=>”只有一个空格),如下所示: object => "plaintext", 我知道的唯一方法是(从行首开始):I ea4x,或者从另一个起始位置开始的等效方法。我很想做与移动线相同的事情,但水平移动: " Move lines up/down nnoremap <Down> :m+<CR>== nnoremap <Up

例如,我有以下几行:

object     => "plaintext",
我想将单词“object”移到右边(因此它离“=>”只有一个空格),如下所示:

    object => "plaintext",
我知道的唯一方法是(从行首开始):
I ea4x
,或者从另一个起始位置开始的等效方法。我很想做与移动线相同的事情,但水平移动:

" Move lines up/down
nnoremap <Down> :m+<CR>==
nnoremap <Up> :m-2<CR>==
vnoremap <Down> :m '>+1<CR>gv=gv
vnoremap <Up> :m '<-2<CR>gv=gv
“上移/下移行
nnoremap:m+==
nnoremap:m-2==
vnoremap:m'>+1gv=gv
vnoremap:m'您可以剪切(删除)和粘贴(放置)您的空白。这并不光荣,但它会起作用。不过,我觉得更好的选择是使用()或()对齐您的文本

使用表格,您可以执行以下操作:

:Tabularize/=>/r1l1l1

也有,但这只是一个奇特的删除和放置。

另一个只做水平移动的选项如下:

:Tabularize/=>/r1l1l1
  • 如果您已经选择了要移动的文本:

    :vnoremap <A-S-l> xp`[v`]
    :vnoremap <A-S-h> xhhp`[v`]
    
    :vnoremap xp`[v`]
    :vnoremap xhp`[v`]
    
  • 在正常模式下,只需移动光标所在的单词(该单词的任何字符)。这些映射将使您处于可视模式:

    :nnoremap <A-S-l> viwxp`[v`]
    :nnoremap <A-S-h> viwxhhp`[v`]
    
    :inoremap <A-S-l> <Esc>viwxp`[v`]
    :inoremap <A-S-h> <Esc>viwxhhp`[v`]
    
    :nnoremap viwxp`[v`]
    :nnoremap viwxhhp`[v`]
    
  • 在插入模式下,只需移动光标所在的单词(在该单词的任何字符中)。这两个映射将使您处于可视模式:

    :nnoremap <A-S-l> viwxp`[v`]
    :nnoremap <A-S-h> viwxhhp`[v`]
    
    :inoremap <A-S-l> <Esc>viwxp`[v`]
    :inoremap <A-S-h> <Esc>viwxhhp`[v`]
    
    :inoremap viwxp`[v`]
    :inoremap viwxhhp`[v`]
    
通过这些映射,您可以:

  • 将选定文本向右移动: Alt+Shift+l
  • 将选定文本向左移动: Alt+Shift+h
基本上,您只需剪切所选内容,适当粘贴,然后再次选择刚粘贴的内容


显然,您可以选择任何您喜欢的映射。

,谢谢!我不知道
`[
`]
@zhimsel谢谢。我刚刚更新了我的答案,包括正常模式和插入模式的映射。你当然可以。r1l1l1
用于对齐和填充。我建议阅读
:h表格演练
了解更多信息。如果表格不符合你的喜好,我建议使用vim easy align。它在teractive,可以更好地满足您的需要。感谢您提供的提示。我正在尝试确定是否可以将文本和pad对齐到左侧。注释标记不允许我将此格式设置为右侧(注释无序,抱歉)嗯,我确实完成了演练,但我会仔细看一看。谢谢!我帖子中的命令,
:Tabularize/=>/r1l1l1
,按照您的要求正确对齐了您的键。谢谢!