퍼지 코드 완성을 얻는 방법


27

Visual Studio에서 ReSharper를 사용하는 경우 접두사 일치 대신 퍼지 일치를 사용하여 기호를 자동 완성 할 수 있습니다. 예를 들어 나는라는 함수를 찾고 있어요 만약 DoSomethingAmazing내가 쓸 수 DoSoAm있으며 모든 포함하는 문자에 맞게 내 쿼리를 확장하려고 할 것 Do, So그리고 Am이름에 어딘가에.

다른 예제는 아래 gif에서 찾을 수 있습니다. 접두사가 아닌 문자열이 올바른 기호로 확장 된 몇 가지 확장을 볼 수 있습니다. (이 질문에서 퍼지 매칭에만 관심이있는 스 니펫 확장을 무시하십시오).퍼지 매칭의 몇 가지 예를 보여주는 GIF

Vim의 YouCompleteMe 플러그인에서 다른 예를 볼 수 있습니다. vim에서 퍼지 매칭의 더 많은 예제를 보여주는 gif

자동 완성회사 모드 모두 접두사 일치가있는 것처럼 보이지만 퍼지 일치를 활성화하는 방법을 찾을 수 없습니다.

이상적으로 솔루션은 언어에 구애받지 않고 사용중인 모든 심볼 완성 패키지에 적용되지만 언어 별 솔루션에도 관심이 있습니다. Helm을 살펴 보았지만 코드 완성에 적용하는 방법을 찾지 못했습니다.

Helm 버퍼를 사용하여 기호 완성을 활성화하는 키 바인딩과 같은 대안을 고려 했지만 팝업 스타일 완성을 사용하여이를 수행 할 수있는 방법이 있기를 바랍니다.

또한 일부 언어는 대시로 기호를 분리하고 다른 언어는 밑줄이나 대시를 사용하여 일치하는 방법에 영향을 줄 수 있기 때문에 언어별로 수동 구성을 수행 할 수 있습니다.


답변:


19

Emacs의 내장 완성 기능은 유사한 퍼지 매칭 (기본적으로 "DoSoAm"이 아닌 "do-so-am"에 사용됨)을 제공하며 IIUC 최신 버전의 회사 모드는 적어도 일부 경우에이를 사용합니다.

예를 들어 Emacs-24.4와 최신 회사 모드를 사용하여 Elisp 버퍼를 열면 company를 입력하면 , 및을 (wi-sy표시하는 완료 메뉴가 나타납니다 .window-systemwindow-system-for-displaywith-syntax-table


2
이맥스 24.4으로 company-mode지원 completion-styles, 이 게시물은 그것을 시도에 대한 가능한 설정을 제안합니다.
wasamasa

24.4를 설치 한 후 이것이 바로 내가 찾던 것임을 알았습니다. 불행히도 언어마다 다르며 다른 언어에서 작동하도록 회사 백엔드를 변경해야합니다. 그러나 대답에서 그것은 내가 찾은 가장 가깝고 더 많은 시간이 걸리면 더 많은 언어에 적용되기를 바랍니다. 감사!
Jake Woods

company-ycmd퍼지 완료를 지원하는 또 다른 백엔드입니다.
Dmitry

9

을 사용하면 표시되는 사용 가능한 후보를 검색 company-mode할 수 있습니다 C-s. 검색 쿼리가 모델에 표시됩니다 (실제로는 쉽게 알 수 없습니다. 여기에 문제를 제기 했습니다 ).

완성을 위해 Helm을 사용하려면 helm-company 또는 ac-helm 사용을 고려하십시오 . 함께 시도하지 않은 ac-helm,하지만 함께 helm-company, 직접의 표준 인터페이스를 대체 할 키에 바인딩 할 수 있습니다 company-complete.


이것은 내가 찾던 것에 가깝습니다. 키 누르기를 호출하지 않고도 완료를 원했지만 접두사 일치와 함께 사용하면 적합한 대안이 있음을 알았습니다. 감사!
Jake Woods

company-modeUI 를 사용하는 경우을 눌러 C-s사용 가능한 후보 목록에서 후보를 검색 할 수 company있습니다.
Tu Do

그러나 나는 그것을 이해하고 위의 의견에서 말했듯이 그것은 내가 찾고있는 것에 가깝습니다. 이상적인 솔루션 (나에게)은 C를 필요로하지 않으며 입력 할 때 팝업 창에서 인라인으로 후보를 검색합니다. 그러나 Cs 접근 방식은 확실히 흥미 롭고 워크 플로우에 통합하려고합니다.
Jake Woods

회사를 사용하는 동안, 나는 찾아 C-M-s더 나은 방법보다 C-s. 메타를 사용하면 검색하는 대신 후보를 필터링합니다.
nanny

@nanny는 그 점을 잘 알고 있습니다.
Tu Do

5

앞에서 언급했듯이 ycmd퍼지 매칭을 지원합니다. 를 통해 사용할 수 있습니다 company-ycmd. 올바르게 구성하면 언어 별 완성뿐만 아니라 간단한 식별자 기반 완성도를 완벽하게 경험할 수 있습니다.


여기서 "적절하게"의 의미를 보여주는 것이 좋을 것입니다.
Jason Hu

2

한 종류 또는 다른 종류의 퍼지 완료를 제공하는 여러 패키지가 있습니다. 예를 들어 Helm이 언급한다고 생각합니다.

도서관 차가워 요 를 사용하는 경우 여러 퍼지 완성 방법 중에서 즉시 선택하여 다른 곳에서 제공 한 것보다 더 많은 것을 선택할 수 있습니다. (저는 특히 퍼지 완료의 팬이 아니지만 제공합니다.)

차가워 짐 완료 (따라서 퍼지 완료, 선택한 경우)는 거의 모든 곳에 적용되지만, 차가워 요 특정 코드 완성 기능 은 많지 않습니다 . 고드름 문서 의이 페이지는 이러한 버퍼 텍스트 완성에 대해 설명합니다.


차가워 요 , 완성의 스테판의 예를 사용하여 (wi-sy이맥스 리스프 모드를 :

  1. 함께 차가워 요 vanilla완료 (이맥스 존중, 제공하는 기능 completion-styles), 당신은 스테판이 언급 한 것과 같은 기호를 얻을.

  2. 현재 TAB 완료 방법 으로 Icicles Swank 퍼지 심볼 완성 (라이브러리 el-swank-fuzzy.el)을 사용하면 다음과 같은 완성 후보를 얻을 수 있습니다.

    창 시스템                
    구문 테이블
    윈도우 시스템 디스플레이
    위젯 코딩 시스템 액션
    위젯 기호 프롬프트 내부
    위젯 코딩 시스템 프롬프트 값
    with-swfy-struct
    widget-specify-doc
    swfy-timedout
    위젯 지정 필드
    위젯 지정 활성
    위젯 지정 버튼
    위젯 지정 삽입
    위젯 지정 샘플
    위젯 지정 비밀
    위젯 지정 비활성
    창 안전하게 수축 가능한 p
    위젯 유형 복사
    창 크기 조정 적용
    창-크기-루트 창-수직으로
    창 디스플레이 테이블
    창-디스플레이 버퍼
    창-크기 조정 적용 -p
    창 크기 조정 적용 총계
    widgetp-display-Completions
    창 다시 표시 끝 트리거
    표시 버퍼 창
    widget-visibility-value-create
    widget-emacs-library-link-action
    위젯 편집 가능 목록 항목 작성
    widget-emacs-commentary-link-action

처음 3 개의 후보는 다시 스테판이 언급 한 후보입니다.

  1. 일반 퍼지 일치 완료 (라이브러리 fuzzy-match.el)에서 유일한 후보는 with-syntax-table입니다.

  2. 함께 차가워 분산 퍼지 완료 , 당신은 후보자의 모두를 얻을 허풍 퍼지 완료 이벤트, 플러스 다음 :

    ange-ftp-wait-not-busy
    심볼릭 링크가있는 디렉토리
    ediff-choose-window-setup-function-automatically를 선택하십시오
    ediff-make-wide-display
    ediff-toggle-wide-display
    ediff 창 디스플레이 p
    ediff-window-ok-for-display
    구문 테이블이있는 ediff
    새로운 버퍼 파일 찾기 시스템 찾기
    gnus 프레임 또는 창 표시 이름
    도움말 창 디스플레이 메시지
    고드름 선택 창-버퍼 표시
    버퍼링 시스템과 코딩 시스템
    set-w32 시스템 코딩 시스템
    창 디스플레이 테이블 설정
    설정 창 재표시 엔드 트리거
    종료시 쉘 기록 기록
    창을 눈에 띄게 나누다
    tree-widget--locate-sub-directory
    w32-find-file-not-found-set-buffer-file-coding 시스템
    w32- 초기화 창 시스템
  1. 함께 차가워 Levenshtein (1) 퍼지 문자열 완료 (1 Levenshtein 거리), 당신은 단지이 완료 얻을 :
    도움말 팔로우 기호
    메시지 확인 뉴스 구문
    w32- 초기화 창 시스템 창 시스템
    윈도우 시스템 디스플레이
  1. 레 벤슈 테인 거리가 1이 아닌 2 인 경우 300 명 이상의 수료 후보가 있습니다.

  2. 엄격한 레 벤슈 테인 (1 또는 2) 완료 와 함께 후보 는 없습니다 . 마찬가지로, 차가워 요 Jaro-Winkler 퍼지 완성을 위해 .


1
퍼지 완료에 대한 잠재적 인 API 겹침이 있지만 코드 완료에는 일반적으로 모드 특정 컴파일 또는 런타임 검사가 필요하다는 데 동의합니다. Icicles는 자신이 말한 것처럼 코드 완성 기능을 거의 제공하지 않으므로 당면한 질문과 관련이없는 것처럼 보입니다.
1

@ dgtized : 글쎄, 나는 동의하지 않습니다. 당신은 시도 했습니까 completion.el? (마찬가지로, dabbrevhippie-expand- 3은 GNU 이맥스에 포함되어 있습니다.) 이런 일들은 당신이 제안, 그들은이 없다하더라도, 코드 완성과 아주 도움이되는 어떤 코드의 특정 지식을. 퍼지 매칭 유무에 관계없이 그들이 얼마나 도움이되는지 놀랄 수도 있습니다. 이와 같이, 여러 후보가있을 때 미니 버퍼를 사용하여 완료하는 코드 별 완료는 자동으로 Icicles 퍼지 완료의 이점을 얻습니다 .
Drew

2

을 사용 ivy하면 최근 업데이트 ivy에서 오버레이의 시점 기능 완료를 지원합니다. 아이비는의 도움으로 퍼지 매칭을 지원합니다 flx. 체크 아웃 작동 방법에 대한 비디오를 :)

complete-symbol기본적으로 바인딩 된 키 바인딩을 누르면 C-M-i오버레이가 팝업되고 퍼지 일치를 사용하여 완료 후보를 얻을 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.