web-dev-qa-db-ja.com

単語の引用/非引用に使用できるVimコマンドは何ですか?

Vimで単語をすばやく引用/引用解除し、引用を変更する(たとえば、'から"に)するにはどうすればよいですか? surround.vim プラグインについては知っていますが、Vimだけを使用したいと思います。

177
Eugene Yarmash

サラウンド.vimはあなたの最も簡単な答えになるでしょう。あなたが本当にそれを使用することに反対しているなら、あなたができることのいくつかの例があります。必ずしも最も効率的ではありませんが、そのため、surround.vimが作成されました。

  • 一重引用符を使用して単語を引用する
    ciw'Ctrl+r"'
    • ciw-カーソルが置かれているWordを削除し、挿入モードになります。
    • '-最初の引用符を追加します。
    • Ctrl+r"-"レジスタの内容、つまり最後のヤンク/削除を挿入します。
    • '-閉じ引用符を追加します。

  • 単一引用符で囲まれた単語の引用を解除します
    di'hPl2x
    • di'-単一引用符で囲まれたWordを削除します。
    • hP-カーソルを1つ左(開始引用符の上)に移動し、削除したばかりのテキストを引用符の前に置きます。
    • l-カーソルを右に1桁移動します(開始引用符の上)。
    • 2x-2つの引用符を削除します。

  • 単一引用符を二重引用符に変更する
    va':s/\%V'\%V/"/g
    • va'-引用符で囲まれたWordと引用符を視覚的に選択します。
    • :s/-交換を開始します。
    • \%V'\%V-視覚的に選択された領域内にある単一引用符のみに一致します。
    • /"/g-それらをすべて二重引用符で置き換えます。
220
jamessan

一重引用符を使用して単語を引用する

ciw'Ctrl+r"'

この方法でやりやすい

ciw '' Esc P
169
installero

役立つマッピングを次に示します。

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

Mapleader変数を変更していない場合は、\q"\q'または\qdを使用してマッピングをアクティブにします。それぞれ、カーソルの下の単語を二重引用符で囲み、カーソルの下の単語を単一引用符で囲み、カーソルの下の単語を囲む引用符を削除します。

25
Geoff Reedy

他のコマンドに加えて、これは行内のすべての単語を二重引用符で囲みます(コメントのとおり)

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

または、バックスラッシュの数を減らしたい場合は、パターンの先頭に\v(非常に魔法の)修飾子を配置できます

:s/\v(\S+)/"\1"/
25
Matteo Riva

単一引用符で囲む(たとえば)ciw'<C-r>"'<esc>は機能しますが、repeatは機能しません。試してください:

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

これにより、デフォルトのレジスタの内容が「リテラル」になります。これで、任意のWordで.を押して引用符で囲むことができます。詳細については、 :h[elp] i_ctrl-r を参照してください。 :h text-objects のテキストオブジェクトについての詳細を参照してください。

ソース: http://vimcasts.org/episodes/pasting-from-insert-mode/

16
James Scriven

マクロの方法

  1. 押す q そして q qレジスターに記録する場合(「引用符」を覚えるショートカットとして「q」を使用します)。

  2. 押す shift + b 現在のWordの前にカーソルを移動します

  3. 押す i タイプ ' (一重引用符)

  4. 押す esc 次に押す e Wordの最後に移動する

  5. 押す a 次に押す ' 再びWordを引用符で囲みます。

  6. 最後に押す q qレジスタに記録します。

使用方法:

  1. 目的のWordにカーソルを移動します。
  2. 押す @q Wordを引用符で囲みます。
  3. 押す @@ 別のWordで繰り返したい場合。

step 4は、{行、文字が見つかるまでの単語など}を好きなように変更できます。 vim variables.vimrcに入れて、あなたの幸せを繰り返してください。

10
Brain90

このための組み込みのvimコマンドはわかりませんが、r"f'r"を使用して 'から'に変更し、r'f"r'を使用して "から 'に変更すると、最初の'または"に立っている場合に機能します。 r'はカーソルの下にあるすべての文字を 'に置き換え、f"は次の "に進みます。

5
Håvard S

VSCodeVimのユーザー向けにできること

vwS"

  • "は、ラップしたいものに置き換えることができます。
  • wを他の選択演算子に置き換えることができます
5
Janac Meena

以下に、Wordの引用と引用解除に使用できる簡単なマッピングを示します。

" '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>
2
Alex Falcucci

VIM for vscode それはひどく行います。 vscodeを使用しない場合は、1つ vim-surround に基づいています。

いくつかの例:

引用符の中にカーソルを置いて「テスト」と入力すると、「テスト」になります。

引用符内にカーソルを置いて「テスト」と入力すると、テストが終了します

引用符内にカーソルがある「test」と入力してcs "tを入力し、123>と入力して<123> testになります

word test type ysaw)にカーソルを置いてテストし、最終的に(test)

1
Lev

.vimrcでnnoremapを使用しています

Wordを単一引用符で囲むには:

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

引用符を削除するには(二重引用符でも機能します):

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

覚えておくべきルール: 'sq' =単一引用符。

1
Niko Riitala

これを行うスクリプトを作成しました。

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>

使用するには、何かを強調表示し、コントロールlを押してから、文字を入力します。関数が知っている文字の1つである場合、正しい終了文字を提供します。そうでない場合、同じ文字を使用して両側に挿入します。

Surround.vimはこれ以上のことを実行できますが、これで十分です。

0
jeremysprofile

これはどう?

 :%s/\'/"/g
0
ghostdog74