2012-07-09 4 views
64

Trong khi sử dụng vim bên trong phiên tmux, tôi không thể yank hoặc dán vào thanh ghi chưa đặt tên. Đi đến một thanh ghi có tên hoạt động tốt, nhưng chưa được đặt tên chưa bao giờ hoạt động.Khắc phục Vim + Tmux yank/dán trên thanh ghi chưa đặt tên

Lỗi là:

E353: Nothing in register * 

Without tmux, vim hoạt động tốt sử dụng cài đặt hiện tại của tôi. Làm cách nào để khắc phục sự cố để tôi có thể sử dụng y rồi p không có lỗi và không chỉ định đăng ký?

+0

Bạn có thể hiển thị tmux.conf của mình không? – Conner

Trả lời

94

Từ thông báo lỗi (Nothing in register *), có vẻ như khi bạn làm đồng bằng ?p, bản sao Vim của bạn đang sử dụng * register thay vì unnamed register*. Điều này có thể do clipboard option của bạn bao gồm giá trị unnamed. Khi được định cấu hình theo cách này, Vim sẽ sử dụng thanh ghi * thay vì thanh ghi chưa đặt tên cho các hoạt động yank, delete, change và put theo mặc định (nghĩa là trừ khi bạn chỉ định một thanh ghi khác với tiền tố "; ví dụ: "ap để đặt từ thanh ghi a).

* Sổ đăng ký chưa đặt tên thực sự có tên là " (dấu ngoặc kép). Nó chỉ là "vô danh" theo nghĩa là bạn không phải đặt tên nó để sử dụng nó (nó là mặc định). I E. bạn không cần phải nói ""p để đặt từ thanh ghi chưa đặt tên, chỉ p.

Giá trị mặc định là clipboard không chứa unnamed, vì vậy có thể đến từ một số cấu hình của bạn (hoặc plugin). Lệnh :verbose set clipboard? sẽ hiển thị cho bạn tập lệnh đặt giá trị hiện tại. Nếu điều này đang được thực hiện trong tệp cấu hình của bạn, thì bạn có thể không muốn làm điều đó khi bạn đang chạy dưới tmux. Ví dụ:

if $TMUX == '' 
    set clipboard+=unnamed 
endif 

Ngoài ra, có thể có một số cách để cho trường hợp của Vim-inside- tmux truy cập sự lựa chọn GUI/clipboard (do đó làm việc với * đăng ký và/hoặc unnamed trong clipboard). Nếu bạn đang chạy Mac OS X, bạn có thể muốn xem my workaround wrapper cho phép truy cập lại khay nhớ tạm cho các quy trình đang chạy bên trong phiên tmux. Nếu bạn đang sử dụng một số hệ điều hành hoặc GUI khác, thì bạn sẽ cần phải tìm hiểu cách Vim thường nói chuyện với GUI và tại sao nó không hoạt động (ví dụ giá trị DISPLAY sai dưới X11, có thể do gắn với một phiên cũ đang chạy một vỏ có giá trị lỗi thời).

+3

Bạn chính xác, .vimrc của tôi có bộ nhớ tạm thời = dòng chưa đặt tên. Tôi đã thêm điều kiện và bây giờ nó hoạt động chính xác trong và ngoài tmux. – Jason

+0

Tất cả các câu trả lời khác chỉ cần thử một cách ngẫu nhiên các cài đặt khác nhau mà không cần nhớ, CHỈ là bạn chỉ ra lý do tại sao! Cảm ơn. – nn0p

+2

Tôi có nên cài đặt nó bằng tùy chọn '--with-wrap-pbcopy-and-pbpaste' trong brew không? – nn0p

4

Plugin fakeclip làm cho thanh ghi clipboard hoạt động như mong đợi ở nhiều thiết bị đầu cuối và hỗ trợ cho tmux/màn hình. Bạn đang sử dụng nó? Nó có thể giải quyết vấn đề của bạn.

Đồng thời, bạn có thể quan tâm đến mẹo này ... Nó không áp dụng cho câu hỏi của bạn, nhưng có liên quan. Tùy thuộc vào loại hệ thống/thiết bị đầu cuối nào bạn đang chạy tmux, bạn có thể cần một số chỉnh sửa trong .tmux.conf của mình.Ví dụ đây là một đoạn trích của .tmux.conf tôi trên OS X (với một số hướng dẫn trong ý kiến):

# To use pbcopy and pbpaste on OS X, get this wrapper and install 
# git clone https://github.com/ChrisJohnsen/tmux-MacOSX-pasteboard.git 
# cd tmux-MacOSX-pasteboard/ 
# make reattach-to-user-namespace 
# mv reattach-to-user-namespace /usr/local/bin 
# After installing, the default command can be reset to use the 'reattach-to-user-namespace' 
# wrapper that was compiled/installed as descripted above. 
set -g default-command "reattach-to-user-namespace -l /bin/bash" 
# #Next, create Ctrl-c and Ctrl-v mappings 
bind C-c run "tmux save-buffer - | reattach-to-user-namespace pbcopy" 
bind C-v run "tmux set-buffer $(reattach-to-user-namespace pbpaste); tmux paste-buffer" 
48

Đây là những gì làm việc cho tôi trong vim/tmux/OSX:

  1. Install Homebrew
  2. cài đặt lắp lại-to-sử dụng namespace: brew install reattach-to-user-namespace
  3. trong vimrc: set clipboard=unnamed
  4. Nói tmux sử dụng hệ thống clipboard: Trong .tmux.conf: set-option -g default-command "reattach-to-user-namespace -l bash"

Nguồn: https://coderwall.com/p/j9wnfw

+2

Lưu ý rằng [câu trả lời chỉ có liên kết được khuyến khích] (http://meta.stackoverflow.com/tags/link-only-answers/info), SO câu trả lời phải là điểm cuối của việc tìm kiếm giải pháp (so với nhưng một điểm dừng khác của tài liệu tham khảo, mà có xu hướng để có được cũ theo thời gian). Vui lòng xem xét thêm bản tóm tắt độc lập tại đây, giữ liên kết dưới dạng tham chiếu. – kleopatra

+6

cho người dùng 'zsh' của khóa học thay thế' bash' bằng 'zsh'. – nikola

+0

Hãy nhớ khởi động lại bất kỳ phiên đăng nhập nào (tức là khởi động lại cửa sổ iTerm/Terminal) sau khi thực hiện việc này. – Momer

0

Cuối câu trả lời, nhưng nó cũng có thể là .tmux.conf của bạn có chứa các dòng sau:

set -g set-clipboard off

kết hợp với a .vimrc chứa

set clipboard=unnamed

điều này sẽ dẫn đến việc vim cố gắng sử dụng khay nhớ tạm không có ở đó.