programing

vim 인스턴스를 실행하는 다른 tmux 창간에 복사 및 붙여 넣기하는 방법

nasanasas 2020. 11. 15. 11:23
반응형

vim 인스턴스를 실행하는 다른 tmux 창간에 복사 및 붙여 넣기하는 방법


예 : vim을 통해 하나의 tmux 창에 복사 한 다음 다른 창으로 전환 (다른 vim 인스턴스 실행)하고 vim paste 명령을 사용하여 붙여 넣습니다. tmux (접두사 + 사용)를 통해 수행 할 수 있다는 것을 알고 있지만 vim을 실행하는 다른 창 사이를 전환하기 때문에 vim 바인딩을 사용하여 복사하여 붙여 넣을 수 있다면 정말 편리 할 것입니다.

어떤 아이디어?


죄송합니다. vim 내장 기능을 사용하도록 설득하려고합니다.


copy/paste쉽게 하기 위해 다른 탭 페이지에서 파일을 열 수 있습니다.

:tabe /path/to/another/file

사용 gt또는 gTTabpages을 전환합니다.


또는 창을 분할하여 다른 파일을 편집합니다.

:sp /path/to/another/file

Ctrl-wwWindows를 전환하는 데 사용 합니다.
창을 수직으로 분할하려면:vsp file


최신 정보:

이것은 내 .tmux.conf파일입니다.

# vim
setw -g mode-keys vi
bind [ copy-mode
bind -t vi-copy v begin-selection
bind -t vi-copy y copy-selection
bind -t vi-copy V rectangle-toggle
bind ] paste-buffer

# buffer
bind Space choose-buffer

터미널 출력을 복사해야 할 때만 사용합니다.


이 편리한 바인딩을 몇 년 동안 사용해 왔습니다. :)

" copy to buffer
vmap <C-c> :w! ~/.vimbuffer<CR>
nmap <C-c> :.w! ~/.vimbuffer<CR>
" paste from buffer
map <C-p> :r ~/.vimbuffer<CR>

하나의 vim 인스턴스 만 사용하는 것이 더 낫다는 데 동의하지만 tmux만으로이 작업을 수행 할 수 있습니다. 복사 모드가 내장되어 있습니다. 내 tmux.conf는 다음과 같이 설정됩니다.

  setw -g mode-keys vi
  unbind [
  unbind p
  bind C-y copy-mode
  bind p paste-buffer
  bind -t vi-copy v begin-selection
  bind -t vi-copy y copy-selection
  bind -t vi-copy Escape cancel

따라서 prefix-<C-y>복사 모드를 활성화 하는 사용할 수 있습니다 /search term. 예를 들어 원하는 위치로 이동하고, v시각적으로 선택 하고, ytmux로 끌어 올릴 수 있습니다. 그런 다음 다른 vim 세션으로 이동하여 삽입 모드로 들어갑니다. 사용 prefix-p붙여 넣기 TMUX 버퍼에 무엇을 붙여 넣습니다. tmux의 붙여 넣기 버퍼를 시스템 클립 보드에 복사하는 방법도 있습니다.


현재 직장에서 Windows를 실행하는 랩톱을 사용하고 있지만 Linux를 실행하는 서버에서 모든 개발 작업을 수행하므로 하루 종일 PuTTY를 통해 tmux 세션에서 작업하게됩니다.

tmux 세션의 다른 창에서 실행되는 vim 인스턴스간에 텍스트를 복사하고 싶었습니다. *레지스터를 사용하여 시스템 클립 보드에 복사 하려고했지만 PuTTY를 통해 연결 되었기 때문에 X 세션 없기 때문에 vim 대신 gVim을 실행하더라도 시스템 클립 보드 없습니다. (이 문제를 해결하기 위해 x-forwarding 또는 무언가를 사용할 수 있었지만 Windows에 x-server를 설치하고 싶지 않았습니다.)

나는 시스템 키보드 대신에 /를 TMUX 복사를 사용 정력에서 버퍼를 붙여 넣을 수있는 방법이 있어야한다고 생각, 과연 사람이 쓴 것을위한 플러그인을 .

fakeclip을 설치 &하면 tmux의 붙여 넣기 버퍼에 매핑 되는 새 레지스터가 추가 됩니다. 내 모든 vim 인스턴스가 동일한 tmux 세션 내에 있기 때문에이 인스턴스 사이에 텍스트를 홱 잡아 당기는 것이 매우 간단합니다.

플러그인 문서에 따르면 fakeclip은 gnu 화면에서도 작동해야하지만 개인적으로 테스트하지는 않았습니다.


tl; dr

설치 fakeclip 플러그인, 그리고 당신은 사용할 수 있습니다 "&y가득 차면 TMUX의 버퍼에, 그리고 "&p넣어 TMUX의 버퍼.


vim 바인딩을 사용하여 콘텐츠를 클립 보드에 복사 한 다음 창으로 전환하여 붙여 넣을 수 있습니다. 다음 키 바인딩이 편리 할 수 ​​있습니다.

noremap ty "+y
noremap tY "+Y  // copy a whole line to the clipboard
noremap tp "+p  // put the text from clipboard after the cursor 
noremap tP "+P  // put the text from clipboard before the cursor 

"+레지스터는 빔에 액세스 시스템의 clipborad하는 데 사용됩니다.

Some useful tips:
1. You can press v or V or ctrl-v to enter visual mode, then select the content you want to yank, and press ty to copy it to your clipboard.
2. ty can be combined with other motions. For instance, tyaw can be used to copy a word under the cursor to the clipboard. tyib copy the content inside parentheses. tyi" copy the text inside double quotation, etc...

See also How to make vim paste from (and copy to) system's clipboard? for further explanation.


solution on Fedora24

you need to use vimx instead of vim

put in your .bashrc or .zshrc

alias vi='vimx'
alias vim='vimx'

and then you can easily copy between vims/tmux panels


$ vim --version | grep clipboard
-clipboard       +insert_expand   +path_extra      -toolbar
+eval            +mouse_dec       +statusline      -xterm_clipboard

$ vimx --version | grep clipboard
+clipboard       +insert_expand   +path_extra      +toolbar
+eval            +mouse_dec       +statusline      +xterm_clipboard

vimx is part of vim-enhanced-2:7.4.1868-1.fc24.x86_64 you most likely have installed


This works in neovim.

Execute :checkhealth, you will find something like these:

## Clipboard (optional)
  - OK: Clipboard tool found: tmux

If not, maybe you need to upgrade the tmux to the latest version 2.9.

Then add the following code in '~/config/nvim/init.vim'

set clipboard+=unnamedplus

참고URL : https://stackoverflow.com/questions/11042920/how-to-copy-and-paste-between-different-tmux-panes-running-vim-instances

반응형