如何快速引用/取消引用单词并更改引用(例如从 '")在 Vim 中?我知道关于 环绕.vim 插件,但我想只使用 Vim。

有帮助吗?

解决方案

Surround.vim 将是您最简单的答案。如果您确实反对使用它,这里有一些您可以采取的措施的示例。不一定是最有效的,但这就是编写 around.vim 的原因。

  • 引用一个单词,使用单引号
    ciw'Ctrl+r"'
    • ciw - 删除光标所在的单词,并最终进入插入模式。
    • ' - 添加第一个报价。
    • Ctrl+r" - 插入内容 " 注册,又称最后一次复制/删除。
    • ' - 添加收盘价。

  • 取消引用单引号引起来的单词
    di'hPl2x
    • di' - 删除单引号括起来的单词。
    • hP - 将光标向左移动一个位置(在开头引用的顶部)并将刚刚删除的文本放在引用之前。
    • l - 将光标向右移动一个位置(在开头引号的顶部)。
    • 2x - 删除两个引号。

  • 将单引号改为双引号
    va':s/\%V'\%V/"/g
    • va' - 直观地选择引用的单词和引号。
    • :s/ - 开始更换。
    • \%V'\%V - 仅匹配视觉选择区域内的单引号。
    • /"/g - 将它们全部替换为双引号。

其他提示

  

报价一个字,使用单引号

     

ciw'Ctrl+r"'

这是我更容易做这样

ciw '' Esc P

下面是一些地图,可以帮助:

:nnoremap <Leader>q" ciw""<Esc>P
:nnoremap <Leader>q' ciw''<Esc>P
:nnoremap <Leader>qd daW"=substitute(@@,"'\\\|\"","","g")<CR>P

如果你没有改变的mapleader变量,则激活与\q" \q'\qd的映射。他们在光标下加双引号的字周围,光标下的单词围绕单引号,分别删除光标下的单词周围的任何报价。

在除了其他命令,这将在括在双引号的线的所有字(按您的评论)

:s/\(\S\+\)/"\1"/

或者,如果你想减少反斜杠号码,你可以把一个\v(极魔法)改性剂在模式的开始

:s/\v(\S+)/"\1"/

要包装在单引号(例如)ciw'<C-r>"'<esc>的作品,但是<强>重复将不起作用。尝试:

ciw'<C-r><C-o>"'<esc>

此放缺省寄存器的内容“的字面”。现在,你可以在任何单词按.将其包装在引号。要了解更多信息请参见 :h[elp] i_ctrl-r 和的 :h text-objects

来源: http://vimcasts.org/episodes/pasting-from-insert -mode /

宏方法

  1. qq 用于记录到 q 寄存器(我们使用“q”作为记住“引号”的快捷方式)。

  2. 转移 + 将光标移动到当前单词的前面

  3. 类型 ' (单引号)

  4. Esc键 然后按 e 移至词尾

  5. A 然后按 ' 再次用引号将该词引起来。

  6. 最后按 q 将其记录到 q 登记。

如何使用它 :

  1. 将光标移动到所需的单词。
  2. @q 用引号引起来的单词。
  3. @@ 如果你想用另一个词重复它。

你可以改变 step 4 任何你喜欢的东西{一行,一个单词,直到找到一些字符,等等}。把它放入 vim variables.vimrc 重复你的幸福。

我不知道这方面的任何内置的Vim命令,但使用r"f'r"从“到‘和r'f"r'改变从’到”改变的作品,如果你站在第一“或”命令r'替换掉性格你的光标”,并期待下一次f"移动你。”

对于 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

所以现在,我直观地选择我想要的任何内容(通常通过 viw - 视觉选择 内幕词) 放在引号中并按 对于双引号,或按 q 对于单引号。

删除引号

vnoremap s <esc>:call StripWrap()<cr>

function! StripWrap()
  normal `>x`<x
endfunction

我用 vim-textobj-引号 这样 vim 将引号视为文本对象。这意味着我可以做 vaq (目视选择 围绕引号. 。这会找到最接近的报价并直观地选择它们。(这是可选的,你可以做类似的事情 f"vww)。然后我按 s 所选内容中的报价。

改变行情

吻。我 删除引号 然后 添加引号。例如,要将单引号替换为双引号,我将执行以下步骤:1.删除单引号: vaqs, 2.添加新报价: vwQ.


下面是可用于引用和解除引用字一些简单的映射:

" 'quote' a word
nnoremap qw :silent! normal mpea'<Esc>bi'<Esc>`pl
" double "quote" a word
nnoremap qd :silent! normal mpea"<Esc>bi"<Esc>`pl
" remove quotes from a word
nnoremap wq :silent! normal mpeld bhd `ph<CR>

我使用nnoremap在我的.vimrc

要单引号的单词:

nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl

要除去引号(作品上双引号以及):

nnoremap qs :silent! normal mpeld bhd `ph<CR>

规则要记住: '平方'=单引号

VIM为vscode 做它awsomely。它是基于一个 VIM环绕的,如果你不使用vscode。

  

一些示例:

     

“测试”与引号内键入光标CS“测试”直到结束‘’

     

“测试”与引号内型DS”光标与测试到结束

     

“测试”与引号内键入光标CS“t与输入123>到最终   与<123>测试

     

测试用光标在字测试类型ysaw)直到结束(测试)

这个怎么样?

 :%s/\'/"/g

我写了一个脚本,做这样的:

function! WrapSelect (front)
    "puts characters around the selected text.
    let l:front = a:front
    if (a:front == '[')
        let l:back = ']'
    elseif (a:front == '(')
        let l:back = ')'
    elseif (a:front == '{')
        let l:back = '}'
    elseif (a:front == '<')
        let l:back = '>'
    elseif (a:front =~ " ")
        let l:split = split(a:front)
        let l:back = l:split[1]
        let l:front = l:split[0]
    else
        let l:back = a:front
    endif
    "execute: concat all these strings. '.' means "concat without spaces"
    "norm means "run in normal mode and also be able to use \<C-x> characters"
    "gv means "get the previous visual selection back up"
    "c means "cut visual selection and go to insert mode"
    "\<C-R> means "insert the contents of a register. in this case, the
    "default register"
    execute 'norm! gvc' . l:front. "\<C-R>\""  . l:back
endfunction
vnoremap <C-l> :<C-u>call WrapSelect(input('Wrapping? Give both (space separated) or just the first one: '))<cr>

要使用时,只需突出的东西,命中控制升,然后键入一个字符。如果它的功能知道的人物之一,它会提供正确的终止符。如果它不是,它会使用相同的字符插入两侧。

Surround.vim可以做更多的不仅仅是这一点,但是这足以满足我的需求。

可视模式地图例如,要添加的单引号文本的选定块周围:

:vnoremap qq <Esc>`>a'<Esc>`<i'<Esc>
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top