2010-07-10 24 views
33

Tôi có một thư mục chứa hàng trăm tệp TTL (TeraTermLanguage). Bây giờ tôi muốn thụt lề tất cả các tệp này.Thụt lề bằng VIM với tất cả các tệp trong Thư mục

Tôi đã tạo teraterm.vim cho thụt đầu dòng và tôi mở tệp bằng VIM và thực hiện "gg = G" và toàn bộ tệp được thụt lề đúng cách.

Nhưng có cách nào không, nơi tôi có thể thụt lề tất cả các tệp trong thư mục.

Tôi muốn làm với sự trợ giúp của Shell. Nhưng trong VIM tôi không thể truyền lệnh thụt lề tập tin làm đối số cho VIM.

Vui lòng đề xuất cách tốt nhất để tôi có thể thực hiện thụt đầu dòng cho tất cả các tệp trong VIM.

+0

điều này hơi khó hiểu ... Shell bạn đang sử dụng? Nếu bạn đang sử dụng một cái gì đó như bash (và sử dụng câu trả lời từ amphetamachine dưới đây), những điều sau đây sẽ hoạt động: cho tệp trong * .ttl * TTL; làm vim -s indentme.src $ file; thực hiện – skeept

Trả lời

57

Đơn giản hơn nhiều so với kịch bản lệnh vim từ dòng lệnh bash là sử dụng vimscript từ bên trong vim (hoặc có lẽ một lớp lót đơn giản hơn nhiều để viết kịch bản vim từ dòng lệnh). Cá nhân tôi thích sử dụng danh sách arg cho tất cả các thao tác đa tệp. Ví dụ:

:args ~/src/myproject/**/*.ttl | argdo execute "normal gg=G" | update 
  • args đặt arglist, sử dụng ký tự đại diện (** sẽ phù hợp với thư mục hiện hành cũng như các thư mục con)
  • | cho phép chúng ta chạy nhiều lệnh trên cùng một dòng
  • argdo chạy sau lệnh trên mỗi arg (nó sẽ nuốt lên thứ hai |)
  • execute ngăn chặn normal từ nuốt lên ống tiếp theo.
  • normal chạy các lệnh chế độ bình thường sau (những gì bạn đang làm việc ở nơi đầu tiên)
  • update là như :w, nhưng chỉ tiết kiệm khi bộ đệm được sửa đổi.

mẫu :args ... | argdo ... | update này là rất hữu ích cho bất kỳ loại tập tin dự án rộng thao tác (ví dụ tìm kiếm và thay thế thông qua %s/foo/bar/ge hoặc thiết lập thống nhất fileformat hoặc fileencoding).

(người khác thích một mẫu tương tự bằng cách sử dụng danh sách đệm và :bufdo, nhưng với danh sách arg tôi không cần phải lo lắng về việc đóng bộ đệm hiện tại hoặc mở cửa phiên vim mới.)

+0

Cảm ơn Nicholas, Đây chỉ đơn giản là cách tuyệt vời để làm. Điều này cũng rất hữu ích trong nhiều trường hợp khác. Mặc dù tôi đã có thể sử dụng kịch bản, nhưng điều này nhanh hơn rất nhiều. Tôi có khoảng 900 tệp mà tôi phải sửa đổi. Chỉ có nấc cục tôi phải đối mặt là mỗi khi nó lấp đầy màn hình với tên tập tin, tôi phải nhấn phím dài, để nó có thể chiếm bộ tiếp theo của tập tin. – hari

+5

Nếu nó theo cách của bạn, bạn sẽ có thể tránh được dấu nhắc "--More--" và nhấn không gian mỗi màn hình bằng một ứng dụng tự do ': im lặng'. Ví dụ. ': argdo im lặng thực thi" normal gg = G "| im lặng update' –

+1

+1 và @ nicholasa.evans Tôi sẽ di chuyển/sao chép nội dung của nhận xét đó vào câu trả lời thực tế (nhưng đó chỉ là tôi) – CoatedMoose

11

Mở thiết bị đầu cuối. Loại:

$ vim -w indentme.scr foo.c 

Sau đó, loại này chính xác (trong lệnh mode):

gg=G:wq 

này sẽ đóng vim, tiết kiệm quá trình thụt tất cả các dòng trong tập tin vào một kịch bản Vim gọi indentme.scr.

Lưu ý:indentme.scr sẽ chứa một kỷ lục của tất cả các lệnh quan trọng đánh máy, vì vậy khi bạn đang thực hiện thụt tập tin, không dành nhiều thời gian sử dụng các phím mũi tên để nhìn xung quanh tập tin, bởi vì điều này sẽ dẫn đến một tập lệnh lớn hơn nhiều và sẽ làm chậm hoạt động hàng loạt.

Bây giờ, để thụt tất cả các dòng trong một tập tin, chỉ cần gõ lệnh sau:

$ vim -s indentme.scr unindented-file.c 

Vim sẽ nhấp nháy mở đóng (nếu bạn đang ở trên một máy tính nhanh chóng và không chỉnh sửa một khổng lồ tệp), thụt lề tất cả các dòng, sau đó lưu tệp tại chỗ.

Thật không may, điều này sẽ chỉ làm việc trên một tập tin tại một thời điểm, nhưng bạn có thể mở rộng các chức năng dễ dàng sử dụng sh 's for loop:

for filename in *.ttl ; do 
    vim -s indentme.scr "$filename" 
done 

Lưu ý: này sẽ tiết kiệm được giao bất kỳ tập tin. Trừ khi set bk nằm trong số ~/.vimrc của bạn, đừng mong muốn lưu một bản sao lưu.

2

tôi đã đi tắt của giải pháp amphetamachine. Tuy nhiên, tôi cần phải tìm kiếm đệ quy qua nhiều thư mục. Đây là giải pháp mà tôi đã sử dụng:

$ find . -type f -name '*.ttl' -exec vim -s indentme.scr "{}" \; 
0

Tham khảo từ các câu trả lời ở trên tôi muốn thực hiện việc này. Tôi sẽ bắt đầu từ đầu để người mới bắt đầu có thể hiểu được.

Step-1 Cài đặt astyle (công cụ được sử dụng để định dạng) bằng cách sử dụng lệnh sau Mở thiết bị đầu cuối. Loại:

sudo apt-get install astyle 

Bước-2 Hãy chắc chắn rằng bạn đã cài đặt trên vim system.Run bạn các lệnh dưới đây từ thư mục trong đó các file mã của bạn are.The dưới lệnh sẽ tạo ra một kịch bản mà chúng tôi dự định để chạy đệ quy như vậy là để làm đẹp mỗi tập tin trong thư mục của chúng tôi. (như đã đề cập trong câu trả lời ở trên)

vim -w indentme.scr foo.c 

Bước-3 Sau đó, gõ này chính xác (trong chế độ lệnh) và nhấn Enter

:%!astyle 

Bước-4 Sau đó gõ này chính xác (trong chế độ lệnh) và nhấn Enter

:wq 

Bước-5 chạy cuối này đệ quy bằng lệnh sau:

find . -type f -name '*.cpp' -exec vim -s indentme.scr "{}" \; 

Tất cả các tệp cpp của bạn sẽ được định dạng đúng.

Các vấn đề liên quan