Sử dụng screenrc, làm cách nào tôi có thể C-a c
mở một cửa sổ mới trong thư mục làm việc của cửa sổ hiện tại? Theo mặc định, nó xuất hiện để mở cửa sổ mới tại thư mục làm việc tại thời điểm phiên màn hình gốc được gọi.
Sử dụng screenrc, làm cách nào tôi có thể C-a c
mở một cửa sổ mới trong thư mục làm việc của cửa sổ hiện tại? Theo mặc định, nó xuất hiện để mở cửa sổ mới tại thư mục làm việc tại thời điểm phiên màn hình gốc được gọi.
Câu trả lời:
Dựa trên câu trả lời SO này , tôi nghĩ rằng nó sẽ hoạt động:
bind c stuff "screen -X chdir \$PWD; screen^M"
Tôi sẽ đi thử nó trên vỏ từ xa của tôi và báo cáo lại nếu nó hoạt động với tôi.
chỉnh sửa: Yup, nó hoạt động. Lệnh "liên kết" đầu tiên thực sự không cần thiết.
Theo mặc định, screen
cũng liên kết C-a C-c
để tạo một cửa sổ mới, vì vậy bạn có thể muốn thêm một dòng khác vào .screenrc
để xử lý trường hợp này:
bind c stuff "screen -X chdir \$PWD;screen^M"
bind ^c stuff "screen -X chdir \$PWD;screen^M"
Làm rõ về cách hoạt động của lệnh này:
stuff
đặt chuỗi đối số của nó trực tiếp vào cửa sổ hiện tại :
Chỉ huy:
stuff string
Nhồi chuỗi
string
trong bộ đệm đầu vào của cửa sổ hiện tại.
screen -X chdir \$PWD
báo cho màn hình thực thi lệnh chdir
, thay đổi thư mục hoạt động của nó (nơi các cửa sổ màn hình mới sẽ bắt đầu) thành biến môi trường $PWD
chứa thư mục làm việc hiện tại. Điều này là không thể làm trong .screenrc
một mình; do đó, thao tác bộ đệm đầu vào với stuff
là cần thiết.
Các screen
lệnh trong vòng một đang chạy screen
tạo ra một cửa sổ mới chỉ thích C-a C-c
.
^M
tạo ra một sự trở lại vận chuyển, nó báo cho shell thực hiện lệnh hiện đang nằm trong bộ đệm. Nếu không có nó, bạn sẽ phải nhấn enter
(hoặc C-m
, tất nhiên).
Do đó, liên kết này sẽ để lại hành trình như thế này trong cửa sổ bạn thực hiện nó trong:
user@host:~/directory$ screen -X chdir $PWD;screen
user@host:~/directory$
stuff
chuỗi.
Đây là bản sao câu trả lời của riêng tôi cho một câu hỏi tương tự trên stackoverflow.com :
Để làm cho màn hình mở một tab / cửa sổ mới trong thư mục hiện tại, bạn có thể thêm mã sau vào
.screenrc
tệp của mình :bind c stuff "screen bash^M"
Điều này sẽ khiến lệnh Ctrl+ a cmở các tab / cửa sổ mới trong thư mục của cửa sổ / tab hiện tại.
Lưu ý: Bạn phải đảm bảo rằng
screen
không không bắt đầu một vỏ đăng nhập theo mặc định, vì đó sẽ gây ra sự khởi đầu vỏ trong thư mục mặc định cho một vỏ đăng nhập chứ không phải là thư mục hiện hành. Điều này có nghĩa là trong.screenrc
tệp của bạn ,shell
lệnh của bạn không thể bao gồm ký tự dấu gạch ngang ('-').Ví dụ, điều này là sai (tức là nó sẽ bắt đầu một vỏ đăng nhập):
shell -$SHELL
Nhưng điều này đúng (nghĩa là nó sẽ không bắt đầu một vỏ đăng nhập):
shell $SHELL
Lưu ý 2: Thật không may, phương pháp này không hoạt động chính xác như lệnh cửa sổ / tab mới mặc định trong
screen
. Thay vào đó, nó viết lệnh vào cửa sổ hiện tại và thực thi nó để tạo cửa sổ / tab mới, vì vậy nó sẽ không hoạt động trong một quá trình shell chạy dài. Nói cách khác, phím tắt này chỉ có thể được thực thi bất cứ khi nào các lệnh shell thông thường có thể được thực thi.Lưu ý 3: Nếu bạn muốn
screen
mở các cửa sổ / tab mới trong thư mục hiện tại và mở một vỏ đăng nhập , bạn có thể thêm mã sau vào.screenrc
tệp của mình :bind c stuff "screen bash -l^M"