タイトルは非常にわかりやすいです。念のため、例を挙げましょう。
START BLOCK1
something
END BLOCK1
START BLOCK2
something
somenthing...
END BLOCK2
BLOCK1
ビジュアルモードBLOCK1
他のファイルに?保存するテキストをラインビジュアルモードまたはブロックビジュアルモードで選択し、
:w new.txt
それはあなたがタイプするものですが、実際にはseeは正確には上にありません。 :
を押すと、コマンドラインに移動し、選択情報が自動的に入力されます。次のようになります。
:'<,'>
残り(w new.txt
)を入力し続けるだけで取得できます
:'<,'>w new.txt
... Enterキーを押します。
ブロックを選択すると、:'<,'>w other-file
を実行できます。これにより、選択したブロックのみがother-file
に書き込まれます。ビジュアルモードで:
を押すと、コマンドラインに'<,'>
が配置されるため、:w other-file
と入力するだけで済みます。
おそらくもっと簡単な方法がありますが、私が行うことは、新しいバッファー(またはタブ)を作成し、p
を使用して貼り付けることです。 :new
を使用して新しいバッファを作成するか、:tabnew
を使用して新しいタブを作成できます。 :w filename
を使用すると、通常どおりバッファ/タブをファイルに書き込むことができます。
コメントで言及されている@dronusのように、:w !pbcopy
の提案は行全体をコピーするため、正しくコピーされません。行のURLのみをコピーしたい場合、コピーできません。以下は.vimrc
ファイルに追加できる行です。CTRL-Cを押すたびに、vimで選択した行がクリップボードにコピーされます。
map <C-c> y:e ~/clipsongzboard<CR>P:w !pbcopy<CR><CR>:bdelete!<CR>
これが何をするかについての詳細を読みたい場合は、これについて 私のブログ で読むことができます。
@rmeadorの提案と同じ実装です。
@songzのソリューションと同様に、私は ":new"を使用してこのようにするのが好きです
vmap <C-c> y:new ~/.vimbuf<CR>VGp:x<CR>:!pbcopy < ~/.vimbuf<CR><CR>
上記の 選択 回答に加えて、
マウスを使用して選択する場合(1)、
そして、@ dronusのコメントで言及されている行全体をコピーするだけの問題です。行を部分的にコピーしたいだけです(2):
(1)DebianベースのDietPi(Raspberry Pi)システムでは、Ubuntu 16.04ワークステーションでマウスを使用して「VISUAL MODE」を入力および選択すると、vimは上記の推奨ソリューションと少し異なります。その後
コマンドに「:」を入力すると、
'<,'>
単純に追加できます
w new.txt
その後。だから私は自分でそれをタイプしただけでうまくいきました:
'<,'>w new.txt
そして、行全体のヤンクされたコンテンツをファイル「new.txt」にコピーしますが、「<」は「選択された行をコピーし、>」が書き込みコマンドの参照ファイルにリダイレクトすることを意味するようです。
(2)そして、@ dronusのように、行の一部を貼り付けないという問題に対して comment が言及されました this ソリューション(選択されたもの、最初の選択肢)が機能しました私のために:
最初のファイルを編集して、必要なテキストをヤンクします。次に、vi内から2番目のファイル(:e/path/to/other/file)を開き、(pと入力して)貼り付けます。それを保存します(上記の ':w new.txt'など)。
次に、マウスでマークされた行の一部またはカーソルで「y」をコピーします。
[編集]私のUbuntuシステムの場合:マウスで選択してもvimで「ビジュアルモード」にならないことがあります。次に、コンテキストメニューを使用して通常のコピー/貼り付けを選択できます... Ubuntuが動作を「クライアント動作」から「ホスト」に変更した理由はわかりません(Ubuntuがssh bashウィンドウをホストしている 'クライアント')...
function! Get_visual_selection()
#Get the position of left start visual selection
let [line_start, column_start] = getpos("'<")[1:2]
#Get the position of right end visual selection
let [line_end, column_end] = getpos("'>")[1:2]
#gotta catch them all.
let lines = getline(line_start, line_end)
if len(lines) == 0
return ''
endif
#Edge cases and cleanup.
let lines[-1] = lines[-1][: column_end - 2]
let lines[0] = lines[0][column_start - 1:]
return join(lines, "\n")
endfunction
function Save_visually_selected_text_to_file()
let selected_text = Get_visual_selection()
call writefile(split(selected_text, "\n"), "/tmp/something.txt")
endfunction
#the c-u does a union of all lines in visual selection.
#this goes in the vimrc
vnoremap <F10> :<c-u>call Save_visually_selected_text_to_file()<cr>
@chenkaieのバリアントに基づいて、私にとってはうまくいきます:
let mapleader = "," let g:mapleader = "," vmap <leader>y y:new ~/.vbuf<CR>VGp:x<CR> nmap <leader>p :r ~/.vbuf<CR>