Làm cách nào để gọi gvim của Windows trong môi trường Windows từ bên trong Cygwin?


3

Khi tôi đưa ra một gvimlệnh trong Cygwin, tôi muốn nó gọi gvim mà tôi đã cài đặt trong Windows.

Tôi đã thử viết một hàm trong .bashrc của mình được gọi là gvimgọi gvim.exe trong thư mục Tệp chương trình của tôi, bằng cách sử dụng cygpathvà tất cả điều đó, nhưng vấn đề là, dường như gọi gvim với môi trường của Cygwin; :echo $HOMEin C: \ cygwin \ home \ Sundar thay vì C: \ Users \ Sundar và :diffsplitbáo cáo lỗi khi tạo các tệp tạm thời mà tôi cho là có liên quan đến cùng. Vì vậy, làm thế nào tôi có thể gọi gvim từ Cygwin nhưng làm cho nó như thể nó được gọi qua, giả sử, menu Start?

Tôi đã cố gắng thay đổi lệnh để chuyển đường dẫn gvim sang cmd.exe /c, nhưng điều đó cũng bằng cách nào đó thiết lập cùng một môi trường. Tôi cần làm gì để thực hiện công việc này?

Câu trả lời:


3

gVim.exe tìm kiếm một HOMEbiến khi nó được chạy. Trong trường hợp của bạn, môi trường Cygwin có HOMEtập var riêng , vì vậy nó đang sử dụng nó.

Bạn có thể thay đổi HOMEgiá trị trong môi trường của mình, nhưng điều đó có thể ảnh hưởng đến các ứng dụng khác. Sau đó, một lần nữa, bạn có thể muốn điều đó. Trong trường hợp bạn không muốn điều đó và giả sử trình bao Cygwin của bạn đang sử dụng trình bao Bash, vì bạn đã gợi ý trong câu hỏi của bạn rằng bạn đang muốn tạo bí danh hoặc hàm, tôi khuyên bạn chỉ nên đặt var cho lệnh đó ví dụ, Bash cho phép bạn thực hiện bằng cách chỉ đặt nó ngay trước khi lệnh được phân tách bằng khoảng trắng ...

VAR=abc command

Ở trên chạy commandnhư thể VARđược đặt thành abc, bất kể nó thực sự là gì. Do vậy...

alias gvim='HOME=/cygdrive/c/Users/Sundar /path/to/gvim.exe'

... hoặc là...

gvim() { HOME=/cygdrive/c/Users/Sundar /path/to/gvim.exe $1; }

... sẽ cho phép bạn chạy gVim thực thi với HOMEvar được đặt thành đường dẫn ưa thích của bạn mà không làm phiền môi trường Cygwin của bạn.


Bên cạnh đó, có thể đáng để bạn sử dụng cygstartđể chạy chương trình thực thi, thay vì gọi trực tiếp ...HOME=/cygdrive/c/Users/Sundar cygstart /path/to/gvim.exe
Costa

Tôi không biết cygstart, điều đó rất hữu ích, cảm ơn. Tôi không muốn quá trình gVim phụ thuộc vào sự hiện diện của Cygwin, đó là một lý do tôi đã đề cập "như thể nó được gọi thông qua menu Bắt đầu". Về môi trường, tôi đang cố gắng tìm ra tất cả những gì tôi cần đặt ngoài $ HOME. Tôi đã thử cài đặt TEMP và TMP nhưng vẫn gặp lỗi "Không thể đọc hoặc ghi tệp tạm thời" và "Không thể tạo khác biệt".
Sundar

Nếu bạn làm :echo $TEMPtrong gVim khi chạy từ Windows Explorer và từ Cygwin, bạn có nhận được các đường dẫn khác nhau không?
Costa

Thật kỳ lạ, không, trong cả hai trường hợp $ TEMP và $ TMP đều là "C: \ Users \ Sundar \ AppData \ Local \ Temp". Nhưng diffsplit hoạt động khi chạy từ Explorer nhưng không chạy khi chạy từ cygwin bằng cách sử dụng "env TMP = C: / Temp / TEMP = C: / Temp / HOME = C: / Users / Sundar / / usr / bin / cygstart 'C: \ Program files (x86) \ Vim \ vim73 \ gvim.exe '"(còn trông giống như những giá trị của TMP và TEMP là bị ghi đè bởi Vim tự động!)
Sundar

Hmm, có lẽ đó là một sự khác biệt về quyền. Có thể phiên bản Cygwin của bạn đang chạy như một người dùng khác hoặc có thể là phím tắt hoặc trình bao bạn đang chạy từ Explorer đang được chạy với tư cách Quản trị viên. Đó là điều tốt nhất tôi có thể đưa ra giả thuyết mà không thể chạm tay vào máy trạm của bạn. Hi vọng rằng bạn giải quyết được nó!
Costa

0

Tôi tìm thấy một giải pháp dễ dàng hơn để theo dõi tất cả các biến môi trường cần thiết, mặc dù nó có một hạn chế. Giải pháp là đưa ra explorer.exe filename.exttại dòng lệnh Cygwin, nơi extlà một phần mở rộng đã được liên kết với gVim trong Windows. Điều này mở gVim trong bối cảnh Windows hoàn toàn như tôi có thể thấy, $ HOME được đặt thành C: \ Users \ Sundar tự động ,: diffsplit hoạt động không có lỗi, v.v ... Hiện tại một giới hạn nên rõ ràng - bạn cần phải có một giới hạn tập tin hiện có với phần mở rộng liên quan đến gVim có sẵn, hoặc điều này sẽ không hoạt động.

Cập nhật : Trong khi tìm hiểu về vấn đề này, tôi đã tìm thấy www.commandlinefu.com/commands/view/2729 (ngay bây giờ, bộ đệm chỉ có văn bản tại http://webcache.googleusercontent.com/search?strip=1&q=cache:http % 3A% 2F% 2Fwww.commandlinefu.com% 2Fcommands% 2Fview% 2F2729 ) và thấy rằng explorer.exe 'C:\Program Files (x86)\Vim\vim73\gvim.exe'mở gvim một cách đáng tin cậy, mà không phải phụ thuộc vào các liên kết tệp. Bây giờ tôi đang tìm cách chuyển các đối số cho gvim đã mở theo cách này.

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.