2009-05-21 12 views
38

Tôi đã đặt một số bí danh trong .bashrc của tôi để mở một nhóm các file dự án trong gvim, mỗi trong tab riêng của họ:file Open in gvim hiện trong nhiều (mới) tab

gvim -p <list of file names using absolute paths> 

Đây là tất cả tốt và tốt, ngoại trừ có một vài nhóm tệp tôi có thể muốn di chuyển giữa bất kỳ lúc nào (dự án hiện tại của tôi sử dụng Ruby on Rails, để giải thích điều đó). Điều gì sẽ thực sự tuyệt vời là nếu tôi có thể gắn thêm các tab mới vào một cá thể gvim hiện có. Ở vị trí cuối cùng của tôi, tôi đã làm việc trên Vista; Tôi đã giải quyết vấn đề này bằng cách mở một loạt các tab trống trong gvim, cho phép tôi nhấp chuột phải vào tên tệp và chọn "Mở trong tên không có tên gvim". Bây giờ tôi sử dụng Ubuntu và không có điều đó trên menu ngữ cảnh. Có cách nào để làm điều này từ dòng lệnh?

Trả lời

64

Nếu vim được biên dịch với tùy chọn clientserver, bạn có thể làm điều đó. Bắt đầu dụ vim của bạn với cờ sau:

$ gvim --servername GVIM # GVIM is the server name. It can be anything. 

Để mở nhiều tab trong trường hợp này, bạn có thể chạy lệnh:

$ gvim --servername GVIM --remote-tab file1 file2 file3 ... 

Tính năng clientserver trong vim là rất tiện dụng. Nó không giới hạn để mở các tập tin; nó có thể được sử dụng để gửi bất kỳ lệnh nào đến vim bằng cách sử dụng dòng lệnh. Ví dụ: để đóng một cá thể vim từ xa, bạn có thể sử dụng:

$ gvim --servername GVIM --remote-send '<Esc>:wqa<CR>' 
+0

thấy vim -h cho các tùy chọn từ xa khác –

+0

tôi đã thêm tùy chọn -geom của tôi vào lệnh ban đầu để bắt đầu gvim. Tôi cũng đã phải loại bỏ các tùy chọn -p (cho các tab) từ tất cả các bí danh. Sau đó, nó làm việc tuyệt vời! – kajaco

+0

Vâng, nó hoạt động tốt ngoại trừ một điều: nếu tôi có nhiều hơn một gvim, đầu tiên là máy chủ và thứ hai (hoặc nhiều) được tạo từ CL hoặc bằng cách nhấp vào biểu tượng hoặc bằng cách chọn tệp mở với gvim, sau đó tôi cố gắng mở một tab trong máy chủ (tôi có các bí danh được thiết lập như đã đề cập), các tab mới _always_ đi trong thể hiện * giây *, bất kể nó được tạo ra như thế nào hoặc phiên bản nào được kích hoạt lần cuối. Bất kỳ ý tưởng? – kajaco

18

Từ bên trong Gvim, nhập :tabe {file_name}. Thao tác này sẽ mở tệp được đặt tên trong tab mới. Nếu bạn không thích nhập tên tệp dài, hãy thử cách này:

:tabnew 
:e . 

Thao tác này sẽ mở một trang tab mới trống và mở trình duyệt tệp. Bạn có thể bấm chuột theo cách của bạn xung quanh hoặc sử dụng bàn phím. Nhấp hoặc nhấn phím enter trên tệp bạn muốn mở. Hãy thử sử dụng bàn phím để định vị con trỏ trên tệp bạn muốn mở và sau đó nhấn 't'. Thao tác này sẽ mở tệp đã chọn trong tab mới, giữ trình duyệt tệp mở trong tab đầu tiên. Đây có thể là một cách nhanh chóng để mở một loạt các tệp.

Có rất nhiều thứ bạn có thể làm với các trang tab có thể giúp cuộc sống dễ dàng hơn. Để đến phần liên quan trong hướng dẫn trợ giúp trực tuyến của Vim, hãy nhập :h tabpage.

+0

Đây cũng là một thủ thuật tuyệt vời để mở một tệp trong phiên bản gvim hiện có. Tôi sử dụng nó cho những thứ mà tôi không cần thường xuyên để tạo ra một bí danh, và khi tôi chỉ muốn một tập tin chứ không phải là toàn bộ chúng. – kajaco

+1

Đợi đã, còn nữa! Bạn có thể thực hiện điều này chỉ bằng một lệnh: : tabnew% –

+0

Lệnh được cung cấp ': tabnew%', Gvim đã mở một tab mới chứa bộ đệm (tên tệp) từ tab trước đó mà từ đó tôi đã nhập lệnh. Đây có phải là hành vi đúng không? –

1

Có một cách:

n*.cpp|tab ba 

hoặc nếu bạn muốn chia:

n*.cpp|sba 

Nếu bạn muốn biết thêm:

:help ba 

và tôi không biết những gì là n, nhưng nó sẽ không hoạt động mà không có nó.

người dùng
5

Linux có thể sử dụng loại kịch bản:

#!/bin/bash 

ANS=`pgrep -fx "gvim --servername GVIM"` 

echo [email protected] 

if [[ ! $ANS ]]; then 
    gvim --servername GVIM 
fi 

if [[ $1 ]]; then 
    gvim --servername GVIM --remote-tab "${@}" 
fi 

Và sau đó chỉnh sửa file gvim.desktop cho việc sử dụng kịch bản này:

Exec=/home/user/bin/my_gvim_script.sh %F 
9

Muốn menu ngữ cảnh Windows của bạn để cho phép bạn mở file trong một tab mới của cửa sổ gvim hiện đang mở?

Lưu tệp này dưới dạng tệp có tên temp.reg và nhấp đúp vào tệp để thêm cài đặt vào sổ đăng ký của bạn. Hãy chắc chắn để sửa đổi đường dẫn đến vim nếu bạn là khác nhau.

Windows Registry Editor Version 5.00 
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim] 
[HKEY_CLASSES_ROOT\*\Shell\Open with &Vim\command] 
@="\"C:\\Program Files (x86)\\Vim\\vim73\\gvim.exe\" -p --remote-tab-silent \"%1\" \"%*\"" 

Bây giờ bạn sẽ có một menu ngữ cảnh như thế này:

vim context menu

+0

Câu hỏi đặt ra là hỏi làm thế nào để làm điều này trên Ubuntu. – kajaco

+1

nếu người dùng Ubuntu đủ thông minh để nhận dòng lệnh, câu trả lời sẽ hoạt động tốt với anh ta. (Đã kiểm tra trên Arch Linux :)) – Slava

1

Đây là gvim khởi động kịch bản của tôi. Đó là phần mở rộng của các câu trả lời trước. Nó đảm bảo chỉ có một gvim dụ sẽ chạy khi gvim được gọi là trong mọi hoàn cảnh:

  • gvim được gọi mà không cần tên tập tin khi không có gvim dụ đang chạy; gvim được bắt đầu.
  • gvim được gọi là không có tên tệp khi có mẫu gvim; một tab mới trống sẽ được mở.
  • gvim được gọi với tên tệp có hoặc không có cá thể gvim; một tab được mở ra hiển thị tệp.

Điều này sẽ bắt chước hành vi tiêu chuẩn của các trình chỉnh sửa khác.

#!/bin/bash 
exec=/usr/bin/gvim #the path to gvim 
if [ $# -eq 0 ] 
    then # no filename given 
    if [ -z $($exec --serverlist) ] 
     then # no filename given and no gvim instance 
     $exec -f --servername GVIM > /dev/null 2>&1 
     else # no filename given, but a gvim instance exists 
     $exec -f --servername GVIM --remote-send ':tabnew<CR>' > /dev/null 2>&1 
    fi 
    else # filenames given 
    $exec -f --servername GVIM --remote-tab "[email protected]" > /dev/null 2>&1 
fi