2012-11-15 18 views
9

Không có cách nào trực quan hơn trong việc xử lý thư mục so với những gì có thể với pushdpopd?Làm thế nào để tận dụng pushd và popd vụng về với lệnh awsome dirs được xây dựng trong Bash

Tôi tìm thấy CLI của các lệnh được xây dựng trong pushdpopd được trình bày cho loại người dùng tâm-boggling. Nhưng đồng thời tôi rất thích sử dụng thường xuyên ngăn xếp thư mục được trình bày bởi lệnh được xây dựng trong dirs.

Vì vậy, nó đã cho tôi một thời gian khá dài để tìm ra trường hợp sử dụng và sau đó để ghi nhớ những người sau đây:

  1. pushd - chuyển đổi hai thư mục từ trên xuống.
  2. pushd +1 - thay đổi thứ hai từ thư mục trên cùng.
  3. pushd -0 - thay đổi về phía dưới từ thư mục trên cùng.
  4. popd +0 - bật đầu thay đổi lên vị trí thứ hai từ thư mục trên cùng.
  5. pushd -0; popd +1 - thay đổi về phía dưới từ thư mục trên cùng và bật lên trên cùng.

Vẫn phải nhập chúng mỗi lần chỉ để sắp xếp với chồng thư mục cảm thấy cách nặng nề với tôi. Tôi thậm chí không thể đưa ra tên ghi nhớ để bí danh năm trường hợp sử dụng đó.

Mọi thông tin chi tiết?

Trả lời

7

Gần đây tôi đã khám phá ra sức mạnh của thư viện readline GNU và các đoạn cắt ngắn về các nét chính mà nó có thể cung cấp cho người dùng trên dòng lệnh của Bash.

Do đó, tôi đã xác định các phím nóng sau trong tệp ~/.inputrc của mình. tập tin cấu hình GNU readline của:

# "pushd" use case. 
"\C-^": "\C-a\C-kpushd\C-m" 

# "pushd +1" use case. 
"\e<": "\C-a\C-kpushd +1\C-m" 

# "popd +0" use case. 
"\ex\e<": "\C-a\C-kpopd +0\C-m" 

# "pushd -0" use case. 
"\e>": "\C-a\C-kpushd -0\C-m" 

# "pushd -0; popd +1" use case. 
"\ex\e>": "\C-a\C-kpushd -0; popd +1\C-m" 

tôi kết hợp các phím nóng từ trên cao như sau:

  1. <ctrl>-^ - vim phím nóng để chuyển đổi dòng điện với bộ đệm trước.
  2. <alt>-< - Shift trái và mang theo.
  3. <alt>-x< - Shift trái và cắt.
  4. <alt>-> - dịch chuyển sang phải và mang theo.
  5. <alt>-x> - dịch chuyển sang phải và cắt.

Các nét chính đặt con trỏ ở đầu dòng (a) và xóa (k) nó. Điều này quan trọng bởi vì khi <ctrl-m> (nhập) là cơ hội đánh trúng, người dùng nhấn phím nóng khi đang ở giữa câu. Giá trị khóa nóng sẽ bị cắt xén với đầu vào người dùng hiện tại và bash không thể thực thi nó.

0

Để sử dụng cá nhân, tôi có một số thư mục mà tôi thường sử dụng sử dụng và muốn chuyển đổi giữa việc sử dụng pushd.Tôi đã đưa ra các chức năng sau đây cho .bashrc tôi:

p() { 
    pushd +"$(($(dirs -p | sed -n '1d;s,.*/,,;/^'"$1"'/{=;q;}')-1))" >/dev/null 
} 

Hãy nói rằng tôi có một thư mục ngăn xếp như sau:

$ dirs -v 
0 ~/repos/local_only/configs 
1 ~/repos/virtualization 
2 ~/repos/local_only/work 
3 ~/repos/core 
4 ~/repos/local_only/my_test_repo 

tôi có thể chuyển từ thư mục hiện hành đối với bất kỳ khác chỉ sử dụng p <letter>, nơi <letter> là tên bắt đầu của thư mục. (Nó có thể nhiều hơn một chữ cái, tất nhiên.) Ví dụ, p m sẽ chuyển sang my_test_repo; p w sẽ chuyển sang work.

Nếu tôi sử dụng p c từ số work dir, nó sẽ chuyển sang thư mục tiếp theo trong ngăn xếp bắt đầu bằng c, trong trường hợp này là core. (Phần q một phần của lệnh sed ngăn không cho trả lại nhiều hơn kết quả đầu tiên.) Để thay đổi cụ thể sang thư mục configs thay thế, tôi có thể sử dụng p con hoặc chỉ p c và sau đó p c một lần nữa.

1d trong lệnh sed là để tôi không bao giờ chuyển sang thư mục hiện tại. Do đó, tôi có thể chuyển đổi giữa thư mục configs và thư mục core của mình chỉ bằng p c.

Việc chuyển hướng stdout sang /dev/null ngăn cản việc thực hiện gây phiền toái (cho tôi) dirs sau mỗi lần thực hiện pushd. (Tôi có thư mục hiện hành được liệt kê trong cửa sổ của tôi anyway.) Tuy nhiên tôi không im lặng stderr -so nếu tôi chạy p q, ví dụ, tôi sẽ thấy:

$ p q 
-bash: pushd: +-1: directory stack index out of range 

bổ sung với builtins

Điều này không thay thế pushdpopd; nó dành cho chuyển đổi nhanh. Để thêm vào ngăn xếp thư mục, tôi vẫn sử dụng pushd <directory_name>. Và nếu tôi được thực hiện trong một thư mục cụ thể (ví dụ: virtualization) Tôi chỉ có thể p v và sau đó popd.


lỗi Không chắc:

Điều này có lẽ sẽ không làm việc đúng với tên thư mục có chứa ký tự dòng mới, nhưng điều đó không quan trọng vì mục đích của tôi. Trong mọi trường hợp, điều tồi tệ nhất có thể làm là pushd bạn vào đúng thư mục.

0

Đây là công việc của tôi:

0. CONF (FAKE DỮ LIỆU)

cd /tmp 
mkdir -p foo/bar baz qux 

1. CONF

dirs -v 
cd foo/bar; pushd .; cd ../.. 
cd baz; pushd .; cd .. 
cd qux; pushd .; cd .. 

2.RUN

dirs -v 
cd $(dirs +1) # switch to dir 1 
cd $(dirs +2) # switch to dir 2 
cd $(dirs +3) # switch to dir 3 

Có thể giải thích tốt hơn với một ghi nhanh này có: https://asciinema.org/a/148441

PRO

  • tại conf: tập tối thiểu các nguyên thủy và shortcut
  • lúc chạy: idem. chỉ sử dụng các chỉ mục. chủ yếu là chỉ đọc, họ thậm chí không bao giờ thay đổi.
Các vấn đề liên quan