Git cho Windows: Chạy vim trong nền mà không có ký hiệu (&)


4

Trên máy Windows của tôi, chạy gVim xuất hiện để kết nối git cho shell windows, trong khi nếu tôi chạy từ dấu nhắc lệnh thì đây không phải là trường hợp.

Làm thế nào tôi có thể chạy gVim (hoặc bất kỳ chương trình nào khác, thực sự) mà không cần buộc vỏ và phải thêm '& amp;' đến cuối mỗi lệnh?

Bất kỳ trợ giúp về vấn đề này sẽ được nhiều đánh giá cao.

Git Bash:

$ gvim hello.txt
[Terminal is now blocked]
[Hit ctrl+c or close gvim, terminal takes input]
$ 

Dấu nhắc lệnh của Windows:

> gvim hello.txt
> [ Can still access cursor and execute commands]

Câu trả lời:


2

Giải pháp nhanh nhất (và có thể bẩn nhất) mà tôi thấy có thể sử dụng gvim theo cách tôi đã từng sử dụng là sửa đổi tệp .bashrc.

Tôi đã thêm chức năng sau vào cuối của nó:

gvim()
{
    /path/to/gvim.exe "$@" &
}

Các "$@" lấy các đối số được truyền vào từ shell và & buộc gvim chạy trong nền.

Tôi muốn không đánh dấu câu trả lời này là được chấp nhận, vì có thể có một giải pháp tốt hơn (ví dụ: tôi đã cài đặt msys / vim của mình ở đâu đó).


Tôi thấy rằng khoảng 90% thời gian, điều này hoạt động hoàn hảo. Khoảng 10% thời gian, tiêu điểm nằm trên cửa sổ git bash, khiến tôi vô tình gõ một loạt các phím gõ vim vào vỏ bash. Một phiên bản cũ hơn của git không có vấn đề này. Có ai khác bị ảnh hưởng?
Jeff Irwin

1

Câu trả lời tôi thấy rằng hoạt động giống như trên hộp Linux của tôi là đặt bí danh trong .bashrc:

alias gvim='start gvim'

Đây vẫn không phải là sửa chữa lý tưởng nhất, nhưng tôi cảm thấy sạch sẽ hơn một chút so với việc tạo ra một chức năng. Ngoài ra, nó không in dòng ID quá trình (ví dụ: "[1] 6840") khi bạn chạy nó hoặc khi bạn đóng cửa sổ bên ngoài.

Điều này vẫn có vấn đề từ sửa lỗi chức năng mà nó chỉ hoạt động cho những thứ bạn tạo bí danh cho. Vì thế sổ tay ví dụ vẫn chặn bash của bạn trừ khi bạn tạo bắt đầu notepad bí danh. Dựa trên bài đăng này tại blog MSDN Dường như các tệp thực thi của Windows có một cờ cho bảng điều khiển biết đó có phải là ứng dụng GUI hay không, nhưng từ những gì tôi có thể thấy, git bash không phân biệt dựa trên cờ đó theo cùng cách mà cmd.exe làm. Nếu bạn có thể đính kèm một cái gì đó vào mỗi lệnh được nhập sẽ kiểm tra .exe cho cờ GUI và thêm vào khởi đầu dựa trên kết quả của bạn, sau đó bạn sẽ tốt để đi.


Tại sao bạn cảm thấy rằng bí danh sạch hơn chức năng? Chúng thực tế giống nhau, và các chức năng mạnh mẽ và linh hoạt hơn rất nhiều.
G-Man

1
Vì mục tiêu duy nhất ở đây là bắt đầu Gvim trong một quy trình độc lập, ném khởi đầu lệnh ở mặt trước của nó làm điều đó và không còn nữa. Khi bạn tạo một hàm, bây giờ bạn đang viết mã lấy các đối số và có thể thực hiện tất cả những điều khác mà bạn không cần phải làm. Mạnh mẽ và linh hoạt hơn là tuyệt vời khi đó là những gì bạn cần, nhưng nó quá mức khi bạn chỉ cần đặt từ khởi đầu trước lệnh của bạn
Zurcher

Đối với tôi, điều này bắt đầu một cái mới cmd cửa sổ ngoài một ví dụ gvim. Bất cứ ý tưởng tại sao?
Kyle Strand

0

Bạn có thể chạy bất kỳ chương trình nào trong nền từ bash bằng cách sử dụng &:

gvim &

Gvim khác với hầu hết các chương trình và thường đặt chính nó vào nền mà không cần &. Để chạy nó ở nền trước, thông thường bạn phải bắt đầu với -f Tùy chọn. Tôi không biết tại sao gvim không hành xử theo cách đó từ bash trên Windows.


1
Đúng vậy, tôi đã hy vọng tôi có thể tránh được '& amp;' vì nó hoạt động như dự định trên một dấu nhắc lệnh thông thường: /
funseiki
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.