什么Vim命令可用于引用/取消引用单词?
如何在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命令,但使用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
寄存器中
步骤4
{一行,一个单词,直到找到某个字符,等等}
使录制的宏持久化
@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"