2011-02-02 13 views
14

ビジュアルモードでテキストを選択した場合、選択したテキストをコマンドラインに挿入するにはどうすればよいですか?vim:選択したテキストをコマンドラインに挿入しますか?

たとえば、現在選択されているテキストを検索する場合は、y/<c-r>"を使用できます。ただし、最初に選択したテキストをヤンクしないで行う方法はありますか?

編集:より良い例、選択範囲を拡大する、ビジュアルモード中に検索など:私は、選択したファイル名の一部を持っている、と私は、その名に付加新しいエディタで開きたい場合。

答えて

2

ビジュアルモードを有効にしてテキストを選択した後、/を押して前方を検索し、<C-R>*を押すと、選択したテキストがコマンドラインに挿入されます。

別の方法(少なくともLinuxでは)<S-Insert>を押して、現在の選択内容をX11に挿入します(たとえば、firefoxで何かを選択し、他のアプリケーションで<S-Insert>を選択してコピーすることもできます)。少なくともLinuxでは)。

特定の例では、/コマンドの後にテキストを挿入すると、視覚的な選択肢が拡大して、次に何が検索されているかが表示されます。

編集:私はGVimを想定していました。視覚選択をX11選択バッファにコピーします(詳細は:help x11-selectionを参照)。

コンソールでVimを使用している場合は、Shiftを押しながらマウスで使用するテキストを選択してから<S-Insert>を使用してそのテキストをコピーすることをお勧めします。コマンドライン。これはLinuxやおそらくOSXでも動作します。私はWindowsについては知らない、申し訳ありません。

+0

残念ながら、X11が利用可能な場合(OSX上やSSH上では動作しないなど)にのみ動作します。ただし、検索の場合はまったく同じことをしないというのは良い点です。私は良い例で私の質問を更新しました。 –

+0

David、SSHを使って作業するとき、私は「シフト・マウスとシフト・インサートで選択する」テクニックを使っています:)それについて考えると、Vimだけで(外部の助けなしに)バッファから何かをコマンドラインはレジスタを介して行われます。あなたの質問は、これを避ける方法でした。その答えは、オペレーティングシステムやグラフィックス環境の設備にあります。シフトインサートは1つです。 –

+0

あなたは「Vimだけで(外部の助けなしに)バッファからコマンドラインに何かをコピーすることができるのはレジスタを介してです」というのはなぜですか? –

1

vimの中から!commandを入力してもよいでしょう。コピー&ペーストではありませんが、sshを使用している場合は、少なくともあなたのバッファを表示させますあなたはあなたのコマンドを打ち込んでいます。

例:!それは本当にすべてあなたがしているものを環境に依存

を作る。..

あなたは窓からパテを使用している場合は、あなたが実際にそれからテキストを強調表示し、コピーすることができます(のように設定可能よくputty内に)、別のputtyセッションまたは別のウィンドウに貼り付けます(screenまたはtmuxを使用している場合)。

実際に箱に入っていてグラフィカルな環境であれば、コピー&の貼り付けはかなり簡単です(この位置にいないと思います)。

お手数ですが、ご迷惑をおかけして申し訳ございません。

+0

申し訳ありませんが、どのように役立つか分かりません。私は、視覚モードで選択されたテキストに特に興味があります(マウスよりも視覚モードを使用するほうが簡単です)。 –

7

私はこの問題を解決するために視覚モードで:を再マッピングしました。次のマッピングで、私は、コマンドライン、Bに選択したテキストを貼り付けることができます - 責任 - 左端の位置にカーソルを移動:

vnoremap : y:<C-r>"<C-b> 

一つの小さな欠点は、私が見ることができます - :を押すと、今の選択を解除します。

2
  1. vimrc設定ファイルにコピー&ペーストコードを入れてください。
  2. vim editorを再度開きます。
  3. を使用してコマンドモードを入力します(V使用など)を選択テキスト:
  4. 選択されたテキストは、今選択したテキストに特殊文字がの準備ができて脱出しなければならないのCtrl-P

を使用して、コマンドラインに貼り付けることができます正規表現で使用する。

クレジット:ierton(このページ)によって考えに基づき

  1. ブライアン・ケネディ

Vim search and replace selected text

" Escape special characters in a string for exact matching. 
" This is useful to copying strings from the file to the search tool 
" Based on this - http://peterodding.com/code/vim/profile/autoload/xolox/escape.vim 
function! EscapeString (string) 
    let string=a:string 
    " Escape regex characters 
    let string = escape(string, '^$.*\/~[]') 
    " Escape the line endings 
    let string = substitute(string, '\n', '\\n', 'g') 
    return string 
endfunction 

" Get the current visual block for search and replaces 
" This function passed the visual block through a string escape function 
" Based on this - https://stackoverflow.com/questions/676600/vim-replace-selected-text/677918#677918 
function! GetVisual() range 
    " Save the current register and clipboard 
    let reg_save = getreg('"') 
    let regtype_save = getregtype('"') 
    let cb_save = &clipboard 
    set clipboard& 

    " Put the current visual selection in the " register 
    normal! ""gvy 
    let selection = getreg('"') 

    " Put the saved registers and clipboards back 
    call setreg('"', reg_save, regtype_save) 
    let &clipboard = cb_save 

    "Escape any special characters in the selection 
    let escaped_selection = EscapeString(selection) 

    return escaped_selection 
endfunction 

" Start the find and replace command across the entire file 
vmap <leader>z <Esc>:%s/<c-r>=GetVisual()<cr>/ 

" When in visual mode, 
" before command mode is entered by using : 
" Put the contents of any selected text into 
" the default register 
" leave the text highlighted. 
" Based on ierton - https://stackoverflow.com/questions/4878980/vim-insert-selected-text-into-command-line 
vnoremap : "pygv: 

"Map ctrl-P to paste escaped contents of default register in command mode 
" Based on bryan kennedy - https://stackoverflow.com/questions/676600/vim-search-and-replace-selected-text 
cnoremap <C-P> <c-r>=GetVisual()<cr> 
0

から取られたコードのほとんどは私が解決策を見つけました。 「」の代わりに「:<」「」と表示されます。だからあなたはいつものようにコマンドを書くためにこれを消去する必要があります。 選択したテキストに展開するには< C-r> *がうまくいきます。

vnoremap <M-8> :<BS><BS><BS><BS><BS>NGrep <C-r>*<CR> 

あなたはそれだけで< CR>を末尾の削除起動する前にコマンドを編集したい場合。

関連する問題