2012-03-29 30 views
17

Làm cách nào để đổi tên biến trong các emacs? Eclipse có một hành động tái cấu trúc "đổi tên" gọn gàng cho phép bạn đổi tên một biến theo cách nhận biết phạm vi, có thể dễ sử dụng hơn làm thay thế chuỗi cục bộ, đặc biệt nếu tên biến là một ký tự như e. Emacs có chức năng tương tự được tích hợp sẵn không?Emacs Đổi tên Biến số

+1

Ngôn ngữ lập trình nào bạn muốn nói? Java? – Tom

+0

ngay bây giờ tôi đang xem php, nhưng lý tưởng là bất kỳ ngôn ngữ nào. – nnythm

+0

Nhiều như tôi thích emacs, tôi thấy thiếu tính năng này thực sự gây phiền nhiễu. Có lẽ có một số câu trả lời mới ra khỏi đó? – Mankka

Trả lời

7

iedit được tạo cho loại điều này.

+2

iedit trong khi một công cụ thay thế tuyệt vời chỉ làm thay thế câm, vì vậy nó không thích hợp để thay thế thông minh (ví dụ: nếu tên biến chỉ là một chữ cái mà người hỏi đặt nó) – Tom

+0

Thực sự iedit cùng với vùng mở rộng cho phép tôi thay thế các biểu tượng trong một thú vị phạm vi từ vựng rất nhanh. Đây là công cụ truy cập của tôi để đổi tên biến ở tất cả các ngôn ngữ. Độ dài của biểu tượng không thực sự phù hợp. –

2

Tôi không chắc ngôn ngữ mã nguồn của bạn là gì. Vì bạn đã đề cập đến Eclipse, tôi cho rằng đó là Java. Một tùy chọn là sử dụng chức năng tags-query-replace. Sử dụng Excuberant Ctags với -e chuyển đổi để tạo thẻ kiểu etgas và gọi tags-query-replace.

7

Bạn có thể sử dụng narrowing để chỉ hiển thị một phần bộ đệm và tìm kiếm/thay thế sẽ chỉ hoạt động trong vùng bị thu hẹp. Ví dụ: bạn có thể sử dụng C-x n d để thu hẹp chức năng hiện tại hoặc chọn khu vực bạn muốn và làm C-x n n. Thực hiện tìm kiếm/thay thế của bạn, sau đó mở rộng lại với C-x n w. Đối với một biến chữ cái đơn lẻ như e, hãy thực hiện query-replace-regexp với C-M-% và sử dụng cụm từ regexp như \be\b để nó chỉ hoạt động trên các cá nhân e thay vì những từ bên trong các từ khác.

Chỉnh sửa: Chỉ cần nghĩ đến một điều khác. Nếu bạn chọn một khu vực, tìm kiếm/thay thế chỉ hoạt động trong khu vực đó. Vì vậy, bạn chỉ có thể chọn phạm vi bạn muốn thay thế, sau đó thực hiện điều query-replace-regexp.

13

Emacs mới có M-s . để chọn biểu tượng dưới con trỏ, sau đó bạn có thể C-M-% và nó sẽ sử dụng biểu tượng hiện được chọn để thực hiện thay thế. CHÚ Ý Đây chỉ là thay thế chuỗi đơn giản, không giống như tính năng 'đổi tên biến' của IDE.

+2

Đây là câu trả lời tuyệt vời cho Emacs. Nhưng tôi mạnh mẽ không đồng ý với việc không ai cần một tính năng đổi tên nhận biết phạm vi, như được cung cấp bởi các IDE Java. – ntc2

+2

Đổi tên theo ngữ cảnh là tính năng được sử dụng nhiều nhất của tôi trong IDE. Tôi chắc chắn cần nó. – byxor

2

Trong Python, điều này ít nhiều có thể thực hiện được với thư viện Tái cấu trúc dây, mà tôi khuyên bạn nên sử dụng emacs-traad, trong MELPA (dễ cài đặt và dễ sử dụng).

Sau khi cài đặt, chúng tôi có chức năng M-x traad-rename làm đổi tên biến trong dự án.

Đối với tìm kiếm đơn giản & thay thế, chúng tôi có Iedit nói trên và cũng Projectile của projectile-replace.

0

Vì bạn đã yêu cầu một tính năng Eclipse, Iedit sẽ không cắt nó. Nó không thông minh, nếu bạn có hai biến có cùng tên trên các phạm vi khác nhau thì sao? Nó sẽ thay đổi cả hai. Điều này không xảy ra trên nhật thực! Bạn sẽ cần công cụ ngôn ngữ cụ thể nếu bạn mong đợi loại nhận thức đó.

Với loại bản ghi, bạn có thể sử dụng tide. Với golang, bạn có thể sử dụng go-doctor. Cụ thể với Java, tôi không thể tìm thấy bất cứ điều gì, nhưng tôi sử dụng meghanada, đó là rất tốt. Nhưng việc tái cấu trúc lại nằm trong danh sách TODO của nó! Bạn sử dụng cũng sử dụng emacs như một khách hàng cho eclipse với eclim.

0

Cũng như xem xét đã đề xuất iedit, bạn cũng có thể xem xét gói multiple-cursors. Hãy xem một số article về nó, với hoạt ảnh của phiên bản trực tiếp.

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