Làm cách nào tôi có thể tạo bí danh vỏ có sẵn khi tách ra khỏi Vim?


11

Trong tôi .zshrc, tôi tuyên bố một số bí danh. Ví dụ, which dbstarthiển thị nội dung của bí danh đó.

Nếu tôi mở vim từ cái vỏ đó, thì đó là một quá trình con. Trong Vim, tôi có thể chạy các lệnh shell với :! some_command. Nếu tôi làm :! echo $0để xem Vim shell nào đang sử dụng, nó sẽ xuất ra '/ bin / zsh'. Tuy nhiên, bí danh của tôi không có sẵn ở đó.

Làm cách nào tôi có thể làm cho vỏ bình thường của mình có sẵn khi tôi tách ra khỏi Vim?

Hai ý tưởng:

  • Bằng cách nào đó EXPORTcác bí danh từ lớp vỏ ban đầu, đến quá trình con của nó vimvà một lần nữa cho quá trình con của nó
  • Định cấu hình Vim để đọc của tôi .zshrckhi tạo các mạng con của nó

bao gồm cả .zshrc.profile của bạn (dường như được sử dụng bởivim
Kiwy

Câu trả lời:


13

Câu hỏi cũ, nhưng giải pháp sạch nhất cho vim trong zsh là thêm bí danh vào ~/.zshenv, tệp mà zsh tải cho tất cả các shell, đăng nhập, tương tác, hoặc nếu không. Điều này tránh bắt đầu vim hoặc zsh với cờ và bất kỳ vấn đề có thể xảy ra với điều đó.

Có một lời giải thích hay về ~/.zshenvvs ~/.zshrcở đây: http://tanguy.ortolo.eu/blog/article25/shrc

Về cơ bản, zsh luôn nguồn ~/.zshenv. Nguồn vỏ tương tác ~/.zshrc, và nguồn vỏ đăng nhập ~/.zprofile~/.zlogin. Do đó, một nguồn vỏ đăng nhập tương tác ~/.zshenv ~/.zprofile ~/.zlogin ~/.zloginvà một vỏ không tương tác, không tương tác như một vim sử dụng để chạy các lệnh chỉ nguồn ~/.zshenv.


Đây không phải là câu trả lời chỉ liên kết, nhưng sẽ tốt nhất nếu bạn nêu ra lời giải thích về sự khác biệt từ liên kết; theo cách đó mọi người đều có thể hưởng lợi từ lời giải thích ở đây và chúng tôi an toàn trước linkrot.
HalosGhost

1
Cập nhật câu trả lời của tôi với những điểm chính từ liên kết.
Kevin Lee

Điều này làm việc theo cấp số nhân tốt hơn cho tôi so với các câu trả lời khác. Khi tôi thêm vim để bắt đầu một vỏ tương tác, nó bị treo ngay lập tức. Khi tôi sử dụng tệp .zshenv (mà trước đây tôi không biết đã tồn tại), tôi đã lấy lại được bí danh của mình!
Caleb

5

Có vẻ như điều này hoạt động cho zsh:

  • Đảm bảo rằng $ZDOTDIR=thư mục .zshrcđược đặt. Ví dụ,export ZDOTDIR=$HOME
  • Trong .vimrc, set shell=zsh\ -ihoặc set shellcmdflag+=icho cùng một hiệu ứng.

Các -ilà bởi vì, khi bắt đầu trong chế độ tương tác, zshell tải $ZDOTDIR/.zshrc. Xem man zshvà tìm kiếm $ZDOTDIRđể biết chi tiết.


1
Hmmm, điều này tạo ra một vấn đề kỳ lạ đối với tôi: sao chép vào bảng tạm hệ thống như "+ybây giờ đình chỉ Vim! superuser.com/questions/712245/ trộm
Nathan Long

5
Vim của tôi bị treo ngay khi tôi mở nó.
Caleb

0

Tôi tin rằng khi bạn vào vimvà bạn sử dụng :!some_commandnó bằng cách sử dụng bất kỳ shell nào được xác định bởi biến môi trường $SHELL.

Đây là cấu hình, vì vậy bạn có thể thay đổi bằng cách ghi đè $SHELLhành vi trong $HOME/.vimrctệp của bạn để sử dụng zshthay thế.

:set shell
shell=/bin/bash
:set shell=zsh\ -i

Hoặc trong việc bạn .vimrcsử dụng 1 trong 2 dòng này

 set shell=/bin/bash\ -i
 set shell=/bin/zsh\ -i

Vim giúp

Xem :help shelltừ bên trong vimđể biết thêm.

:!{cmd}                 Execute {cmd} with the shell.  See also the 'shell'
                        and 'shelltype' option.
                        Any '!' in {cmd} is replaced with the previous
                        external command (see also 'cpoptions').  But not when
                        there is a backslash before the '!', then that
                        backslash is removed.  Example: ":!ls" followed by
                        ":!echo ! \! \\!" executes "echo ls ! \!".
                        After the command has been executed, the timestamp of
                        the current file is checked timestamp.

Không, như tôi đã nói: "Nếu tôi làm :! Echo $ 0 để xem Vim đang sử dụng cái gì, nó sẽ xuất ra '/ bin / zsh'"
Nathan Long

@NathanLong - không tôi nghĩ điều đó làm bạn hiểu lầm, hãy xem thông tin cập nhật của tôi.
slm

@slm vim kéo giá trị từ $SHELL. Vì vậy, vỏ của bạn là /bin/bash. Nếu vỏ của tôi là /bin/zsh, đó là những gì nó sẽ sử dụng.
Patrick

0

Bằng cách thiết lập shell=/usr/bin/zsh\ -ltrong .vimrcgiải quyết vấn đề của tôi

Ghi chú:

Tôi đang sử dụng: linux mint 17.1


sử dụng Ubuntu 14.04, điều này không hiệu quả với tôi
vilsbole
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.