Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/vim/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
什么Vim命令可用于引用/取消引用单词?_Vim_Quoting - Fatal编程技术网

什么Vim命令可用于引用/取消引用单词?

什么Vim命令可用于引用/取消引用单词?,vim,quoting,Vim,Quoting,如何在Vim中快速引用/取消引用单词和更改引用(例如,从'更改为“)?我知道该插件,但我只想使用Vim。我不知道任何内置的Vim命令,但使用r“f'r”将其从“改为”和r'f“r”将其从更改为”“如果您站在第一个”或“上,则有效”。命令r'将光标下的任何字符替换为',并且f“将您向前移动到下一个”如何 :%s/\'/"/g surround.vim将是您最简单的答案。如果您确实反对使用它,下面是一些示例,说明您可以做些什么。不一定是最有效的,但这就是为什么要编写surround.vim 引

如何在Vim中快速引用/取消引用单词和更改引用(例如,从
'
更改为
)?我知道该插件,但我只想使用Vim。

我不知道任何内置的Vim命令,但使用
r“f'r”
将其从“改为”和
r'f“r”
将其从更改为”“如果您站在第一个”或“上,则有效”。命令
r'
将光标下的任何字符替换为',并且
f“
将您向前移动到下一个”

如何

 :%s/\'/"/g

surround.vim将是您最简单的答案。如果您确实反对使用它,下面是一些示例,说明您可以做些什么。不一定是最有效的,但这就是为什么要编写surround.vim

  • 引用一个单词,使用单引号
    ciw'Ctrl+r'
    • ciw
      -删除光标所在的单词,并以插入模式结束
    • -添加第一个引号
    • Ctrl+r”
      -插入
      寄存器的内容,也就是最后一次拖动/删除
    • -添加结束报价。

  • 将包含在单引号中的单词取消引号
    di'hPl2x
    • di'
      -删除单引号内的单词
    • hP
      -将光标向左移动一处(在开始引用的顶部),并将刚刚删除的文本放在引用之前
    • l
      -将光标向右移动一处(在开始引用的顶部)
    • 2x
      -删除两个引号。

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

以下是一些有帮助的映射:

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

如果尚未更改mapleader变量,请使用
\q“
\q'
\qd
激活映射。它们在光标下的单词周围添加双引号,在光标下的单词周围添加单引号,分别删除光标下单词周围的任何引号。

除了其他命令外,这将把所有单词用双引号括起来(根据您的注释)

或者,如果您想减少反斜杠的数量,可以在图案的开头添加一个
\v
(非常神奇)的修饰符

:s/\v(\S+)/"\1"/
引用一个单词,使用单引号

ciw'Ctrl+r'

这样做对我来说比较容易

ciw '' Esc P

我正在我的.vimrc中使用nnoremap

引用一个单词:

nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl
" '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 sq:silent!正常的mpea'bi'`pl
要删除引号(也适用于双引号),请执行以下操作:

nnoremap qs:silent!正常mpeld bhd`ph
记住的规则:“sq'=单引号。

用单引号括起来(例如)
ciw'
有效,但重复无效。尝试:

ciw'<C-r><C-o>"'<esc>
ciw''
这会将默认寄存器的内容“按字面”放置。现在,您可以在任何单词上按
,将其用引号括起来。要了解更多信息,请参阅


来源:添加引号

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

function! StripWrap()
  normal `>x`<x
endfunction
我开始在我的
.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
我使用,以便vim将引号视为文本对象。这意味着我可以执行
vaq
(在引号周围进行可视化选择。这会找到最近的引号并进行可视化选择。(这是可选的,您可以执行类似
f“vww
)的操作。然后我按
s
,从选择中删除引号

更改引号

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

function! StripWrap()
  normal `>x`<x
endfunction
吻。我删除引号,然后添加引号。 例如,要将单引号替换为双引号,我将执行以下步骤: 1.删除单引号:
vaq
,2.添加新引号:
vwQ


  • 这里的代码被修改并用作我答案的一部分
  • vim文本obj引号

    • 以下是一些简单的映射,可用于引用和取消引用单词:

      nnoremap sq :silent! normal mpea'<Esc>bi'<Esc>`pl
      
      " '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 qw:静默!正常mpea'bi''pl “双引号”一词 nnoremap qd:静默!正常mpea“bi”`pl “从单词中删除引号 nnoremap wq:静音!正常mpeld bhd`ph
      宏方法!

    • 按q和q键记录到q寄存器中(我们使用“q”作为快捷键来记住“引号”)

    • 按shift+b将光标移动到当前单词的前面

    • 按i键输入(单引号)

    • 按esc键,然后按e键移动到单词末尾

    • 按a,然后再次按“以引号括起单词

    • 按esc键进入正常模式

    • 最后按q将其记录到
      q
      寄存器中

    • 如何使用

    • 将光标移动到所需的单词
    • 按@q将单词用引号括起来
    • 如果要将其重复到另一个单词中,请按@
    • 你可以随意改变
      步骤4
      {一行,一个单词,直到找到某个字符,等等}

      使录制的宏持久化

    • 打开
    • 转到文件末尾
    • 更改为插入模式。键入以下内容以使其保持不变:
    • 让@q='ctrl+r ctrl+r q'
    • 保存并退出

    • 打开你的文件,转到一些单词

    • 现在按
      @q

    • 如果你做得正确,神奇的东西就会出现在你的话语中


      您可以将此应用于您喜欢的其他宏。

      对于VSCodeVim用户,您可以这样做

      vwS”

      • 您可以用以下内容替换
        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>
        
        :vnoremap qq <Esc>`>a'<Esc>`<i'<Esc>
        
        ysiw' // surround in word `'`
        
        ds' // drop surround `'`
        
        cs'" // change surround from `'` to `"`
        
        cst<em> // change surround from current tag to `<em>`
        
        s/\(\w\+\)/"\1"/g
        
        aaa,bbb,ccc
        
        "aaa","bbb","ccc"