tmux와 시스템 클립보드를 모두 사용하도록 vim 구성

tmux와 시스템 클립보드를 모두 사용하도록 vim 구성

저는 vim을 처음 접했기 때문에(현재 vim을 사용하고 있습니다 nvim) 저의 지식 부족을 용서해 주십시오. 많은 질문이 저와 유사하지만 정확히 동일하지는 않습니다.

나는 이것을 원한다:

  • vim기본값은 시스템 클립보드가 아닌 버퍼에 잘라내기/복사하는 것입니다.
  • vim다른 레지스터(내 생각에는 그렇다면 +정정해 주세요 *!)는 시스템 클립보드로 이동해야 합니다.

나는 몇 가지 조사를 해봤지만 (지금까지) 아무 것도 효과가 없었습니다.

정보:

  • 제가 사용하는 것은 이렇게 버퍼 tmux에 밀어넣는 것 입니다.tmux
  • 집에 없어서 지금 사용하고 termux있어요termux-clipboard-get/set

내 상황에 효과가 있다고 생각하는 방법은 다음과 같습니다.

let g:clipboard = {
  \   'name': 'TmuxTermux',
  \   'copy': {
  \      '*': ['tmux', 'load-buffer', '-'],
  \      '+': ['termux-clipboard-set'],
  \    },
  \   'paste': {
  \      '*': ['tmux', 'save-buffer', '-'],
  \      '+': ['termux-clipboard-get'],
  \   },
  \   'cache_enabled': 1,
  \ }

이제 잘라내기/복사할 때 tmux버퍼가 vim콘텐츠를 공유합니다. 완벽합니다! (거의...) +그러나 시스템 클립보드를 사용하기 위해 버퍼를 사용할 수 없습니다. "+"를 누르면 커서가 한 줄 아래로만 이동하고 위의 순서를 바꾸면( 대신 termux-clipboard-get/set레지스터 만들기 ), 누르면 커서가 있는 단어의 모든 인스턴스가 강조 표시됩니다.*+*

읽으면서 나는 다음을 기대합니다.

  • 기본적으로 레지스터가 vim사용되는데 *, 이는 tmux버퍼 에 성공적으로 등록 dd/yy하고 붙여넣기 p(또는 tmux[PREFIX]+[p]
  • 다른 레지스터(시스템 클립보드)에 잘라내기/복사/붙여넣기를 원할 경우 붙여넣기 (심지어 )를 +사용 하지만 작동하지 않습니다.+dd/+yy+p*dd/*yy/*p

질문:

위와 같이 +커서를 한 줄 아래로 이동하고 이를 Register 로 변경할 때 현재 단어와 해당 단어가 나타나는 다른 항목을 강조 표시합니다 *.*

더 많은 경험이 있는 분들에게 사과드립니다. 방금 겪었습니다 emacs(아주 아프네요! :)

답변1

저는 vim과 tmux를 사용하고 있으며 시스템 클립보드로 작업하고 있습니다. 다음이 있습니다.

" copy and paste with clipboard  
                                                                                                                                                        
" paste from system CTRL-C clipboard                                                                                                                                                                                                      
nnoremap <Leader>p "+p                                                                                                                                                                                                                    
" paste from system highlighted clipboard                                                                                                                                                                                                  
nnoremap <Leader>P "*p                                                                                                                                                                                                                    
" copy contents of unnamed register to system CTRL-C clipboard                                                                                                                                                                            
nnoremap <silent><Leader>y :call Preserve("normal! Gp\"+dGu")<cr>                                                                                                                                                                         
            \ :echo 'copied to CTRL-C clipboard'<cr>                                                                                                                                                                                      
" copy contents of unnamed register to system highlghted clipboard                                                                                                                                                                        
nnoremap <silent><Leader>Y :call Preserve("normal! Gp\"*dGu")<cr>                                                                                                                                                                         
            \ :echo 'copied to highlight clipboard'<cr>             

<Leader>y 및 <Leader>Y를 사용하면 vim의 이름 없는 레지스터에서 시스템 클립보드로 내용을 가져올 수 있습니다. 이 두 가지 재맵핑은 다음 함수에 의존합니다(.vimrc에서 재맵핑하기 전에 나타나야 합니다:

" run a command, but put the cursor back when it's done                                                                                                                                                                                       
function! Preserve(command)                                                                                                                                                                                                                   
    " Preparation: save last search, and cursor position.                                                                                                                                                                                     
    let _s=@/                                                                                                                                                                                                                                 
    let l = line(".")                                                                                                                                                                                                                         
    let c = col(".")                                                                                                                                                                                                                          
    " Do the business:                                                                                                                                                                                                                        
    execute a:command                                                                                                                                                                                                                         
    " Clean up: restore previous search history, and cursor position                                                                                                                                                                          
    let @/=_s                                                                                                                                                                                                                                 
    call cursor(l, c)                                                                                                                                                                                                                         
endfunction        

참고로 저는 다음 사항을 테스트하는 데 많은 시간을 소비하지 않았지만 (Linux) 호스트와 호스트(클라이언트가 아님)의 tmux 세션에 ssh를 연결할 때 이러한 재매핑이 가끔 발생한다는 사실을 발견했습니다. 호스트 vim의 이름 없는 레지스터에서 데이터를 검색할 수 있는 것 같습니다. 클라이언트의 시스템 클립보드에 복사됩니다(그 반대도 마찬가지). 이렇게 행동하는 게 좋은데 가끔 두 사람이 말을 안 하는 경우가 있는데 왜 그런 건지 모르겠어요.

어쨌든 누군가에게 도움이 되길 바랍니다!

관련 정보