Lịch sử lệnh trong zsh


32

Hiện tại tôi có zsh được thiết lập theo cách mà lịch sử lệnh được chia sẻ giữa tất cả các phiên ngay lập tức.

Giả sử tôi có một trình giả lập thiết bị đầu cuối mở với hai tab, mỗi tab có phiên zsh, A1 và A2. Nếu tôi nhập ls -la trong A1, sau đó vào A2 và nhấn phím mũi tên, tôi sẽ thấy ls -la trong dấu nhắc lệnh.

Tôi muốn thay đổi nó để các phiên không chia sẻ lịch sử lệnh với nhau mặc dù khi bạn bắt đầu phiên mới, nó sẽ nhận được tất cả lịch sử trước đó từ tất cả các phiên trước đó.


Tôi làm điều đó thường xuyên. Tuy nhiên, có rất nhiều câu hỏi vẫn chưa có câu trả lời thỏa đáng.
Nghệ thuật

Câu hỏi tuyệt vời và câu trả lời hữu ích. Tôi nghĩ rằng đây là một điều đặc biệt iTerm2. Hy vọng nhận xét này sẽ có người theo cách này nếu họ đưa ra giả định tương tự.
Alan H.

Câu trả lời:


40

Có lẽ bạn đã INC_APPEND_HISTORYthiết lập.

Các INC_APPEND_HISTORYtùy chọn, từ man zshoptions:

Tùy chọn này hoạt động như APPEND_HISTORY ngoại trừ các dòng lịch sử mới được thêm vào $ HISTFILE tăng dần (ngay khi chúng được nhập), thay vì đợi cho đến khi thoát khỏi trình bao.

Tùy chọn mà bạn muốn là APPEND_HISTORY:

APPEND_HISTORY Nếu điều này được đặt, các phiên zsh sẽ nối thêm danh sách lịch sử của chúng vào tệp lịch sử, thay vì thay thế nó. Do đó, nhiều phiên zsh song song tất cả sẽ có các mục mới từ danh sách lịch sử của chúng được thêm vào tệp lịch sử, theo thứ tự mà chúng thoát. Tệp vẫn sẽ được ghi lại định kỳ để cắt bớt khi số lượng dòng tăng 20% ​​vượt quá giá trị được chỉ định bởi $ SAVEHIST (xem thêm tùy chọn HIST SAVE BY COPY).

Bạn có thể đọc về các tùy chọn này trong man zshoptions, man zshallhoặc trực tuyến tại đây .

Để đặt chúng, trong ~/.zshrchoặc tương tự, bạn nên có:

setopt APPEND_HISTORY

Xin lưu ý rằng, nếu bạn đang sử dụng oh-my-zsh theo mặc định, tôi tin rằng, INC_APPEND_HISTORYđược sử dụng. Tôi không chắc chắn 100% về cách mọi thứ được tải, nhưng nếu oh-my-zshtùy chọn ghi đè lên cái bạn đã đặt ~/.zshrc, bạn có thể sử dụng nó trong~/.oh-my-zsh/lib/history.zsh


echo unsetopt INC_APPEND_HISTORY >~/.oh-my-zsh/custom/history.zsh
youfu

Làm thế nào iTerm2 có thể được cấu hình để khôi phục lịch sử cá nhân của các tab sau khi khởi động lại (đối với zsh và oh-my-zsh)?
Googol

10

Để thêm vào câu trả lời được chấp nhận, nếu bạn sử dụng oh-my-zsh, bạn có thể có SHARE_HISTORYtùy chọn được bật theo mặc định.

Để đạt được sự tách biệt giữa các shell đang chạy + toàn bộ lịch sử được kết hợp trong một thiết bị đầu cuối mới mở, bạn phải bình luận hoặc xóa dòng sau:

setopt share_history # share command history data

từ ~/.oh-my-zsh/lib/history.zsh


Trong trường hợp của tôi, đường dẫn của tệp history.zsh là~/.antigen/repos/https-COLON--SLASH--SLASH-github.com-SLASH-robbyrussell-SLASH-oh-my-zsh.git/lib/history.zsh
suzanshakya

3
Một cách khác để làm điều đó là đưa unsetopt share_historyvào .zshrcsau khi bạn oh-my-zshđã tải. Tài liệu ở đây .
phản đối

cảm ơn @countbeing đã sửa nó cho tôi - bạn nên đặt câu trả lời riêng, đó là cách dễ nhất để sửa nó
jcollum
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.