在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
,按照您的要求正确对齐了您的键。谢谢!