如何快速报价/引文结束词和引述的变化(例如从'到")在Vim中?我知道surround.vim插件,但我想只使用Vim.
jam*_*san 231
surround.vim将是你最简单的答案.如果你真的反对使用它,这里有一些你可以做的例子.不一定是效率最高的,但这就是为什么环绕着.vim写的原因.
ciw'Ctrl+r"'
ciw - 删除光标所在的单词,最后进入插入模式.' - 添加第一个引用.Ctrl+r"- 插入"寄存器的内容,即最后一个yank/delete.' - 添加结束报价.
di'hPl2x
di' - 删除单引号括起来的单词.hP - 将光标向左移动一个位置(在开头引号的顶部)并将刚删除的文本放在引号之前.l - 将光标向右移动一个位置(在开头引号的顶部).2x - 删除两个引号.
va':s/\%V'\%V/"/g
va' - 直观地选择引用的单词和引号.:s/ - 开始更换.\%V'\%V - 仅匹配视觉选定区域内的单引号./"/g - 用双引号替换它们.ins*_*ero 176
引用一个单词,使用单引号
ciw'Ctrl+r"'
我这样做更容易
ciw '' Esc P
Run Code Online (Sandbox Code Playgroud)
Geo*_*edy 27
这是一些可能有用的映射:
:nnoremap <Leader>q" ciw""<Esc>P
:nnoremap <Leader>q' ciw''<Esc>P
:nnoremap <Leader>qd daW"=substitute(@@,"'\\\|\"","","g")<CR>P
Run Code Online (Sandbox Code Playgroud)
如果您尚未更改mapleader变量,请使用\q" \q'或激活映射\qd.它们在光标下的单词周围添加双引号,在光标下的单词周围单引号,分别删除光标下单词周围的任何引号.
Mat*_*iva 26
除了其他命令之外,这将用双引号将所有单词括起来(根据您的注释)
:s/\(\S\+\)/"\1"/
Run Code Online (Sandbox Code Playgroud)
或者如果你想减少反斜杠的数量,你可以\v在模式的开头放一个(非常神奇的)修饰符
:s/\v(\S+)/"\1"/
Run Code Online (Sandbox Code Playgroud)
Jam*_*ven 18
用单引号(例如)包装ciw'<C-r>"'<esc>起作用,但重复不起作用.尝试:
ciw'<C-r><C-o>"'<esc>
Run Code Online (Sandbox Code Playgroud)
这将默认寄存器的内容"按字面意思".现在,您可以按.任何单词将其包装在引号中.要了解更多:h[elp] i_ctrl-r有关文本对象的信息,请参阅:h text-objects
资料来源:http://vimcasts.org/episodes/pasting-from-insert-mode/
Ula*_*ach 17
如果你使用vim插件https://github.com/tpope/vim-surround(或者使用VSCode Vim插件,预装了vim-surround),非常方便!
添加
ysiw' // surround in word `'`
Run Code Online (Sandbox Code Playgroud)
降低
ds' // drop surround `'`
Run Code Online (Sandbox Code Playgroud)
改变
cs'" // change surround from `'` to `"`
Run Code Online (Sandbox Code Playgroud)
它甚至适用于 html 标签!
cst<em> // change surround from current tag to `<em>`
Run Code Online (Sandbox Code Playgroud)
查看 github 上的自述文件以获得更好的示例
小智 12
在单词周围添加引号:viw S '
将周围环境从 ' 更改为 " : cs ' "
Bra*_*n90 10
宏的方式
按下q并q记录到q寄存器(我们使用"q"作为记住"引号"的快捷方式).
按shift+ b将光标移动到当前单词的前面
按i类型'(单引号)
按,esc然后按e移动到单词结尾
按,a然后再按'一次用引号括起来.
最后按下q将其记录到q寄存器中.
如何使用它 :
你可以改变step 4你喜欢的任何东西{一条线,一个字直到找到一些角色等}.把它放进@q和q重复你的幸福.
对于VSCodeVim的用户,您可以
vwS"
"用任何您想包装的东西代替。w用任何其他选择运算符替换添加报价
我开始在我的.vimrc:
vnoremap q <esc>:call QuickWrap("'")<cr>
vnoremap Q <esc>:call QuickWrap('"')<cr>
function! QuickWrap(wrapper)
let l:w = a:wrapper
let l:inside_or_around = (&selection == 'exclusive') ? ('i') : ('a')
normal `>
execute "normal " . inside_or_around . escape(w, '\')
normal `<
execute "normal i" . escape(w, '\')
normal `<
endfunction
Run Code Online (Sandbox Code Playgroud)
所以现在,我在引号中直观地选择我想要的任何内容(通常通过viw-在 word 中直观地选择)并按Q双引号,或按q单引号。
删除报价
vnoremap s <esc>:call StripWrap()<cr>
function! StripWrap()
normal `>x`<x
endfunction
Run Code Online (Sandbox Code Playgroud)
我使用vim-textobj-quotes以便 vim 将引号视为文本对象。这意味着我可以做vaq(直观地选择引号包围。这寻找最近的报价,并在视觉上选择它们。(这是可选的,你可以这样做f"vww),然后我按s到剥离从选择的报价。
更改报价
吻。我删除引号然后添加引号。例如,要用双引号替换单引号,我将执行以下步骤: 1. 删除单引号:vaqs, 2. 添加新引号:vwQ。
我不知道任何内置的vim命令,但是如果你站在第一个'或r"f'r"' ,则使用从'更改为'并r'f"r'从更改为'到'工作.该命令r'用' 代替光标下的任何字符',然后f"让你前进到下一个".