2013-03-10 1 views
2

내가 할 일 목록을 관리 할 수 ​​정력을 사용하고, 다음 할 수있는 단축키를 설정하려는 :Vim을 설정하여 특정 문자열을 포함하는 모든 줄을 검색하고 정렬 할 수 있습니까?

  1. 커서 아래의 단어가 포함 된 모든 행을 찾습니다. 세계는 항상 다음과 같은 형식의 태그입니다. #mytaghere

  2. 이러한 모든 줄은 알파벳순으로 그 안에 포함 된 다른 태그로 분류하십시오. 다시 태그는 #mytaghere 형식입니다. 예를 들어 #priorityA 태그가있는 모든 줄은 알파벳순으로 정렬되고 #priorityB 태그와 함께 모든 줄 위에 배치됩니다.

  3. 이 모든 라인을 Vim의 퀵 픽스 윈도우에 넣으십시오.

나는 나의의 .vimrc 파일에 다음을 넣어 1과 3의 제한된 버전을 달성하기 위해 관리해야 :

map <f2> :vimgrep <cword> % <bar> copen <enter> 
set [email protected],48-57,_,192-255,95,35 "lets cword include #s and _s 

커서 아래의 단어가 #을 포함 할 때마다이 설정이 실패하고 문자가 다른 것일 때마다 작동합니다 (예 : _). 오류 : "E682 : 잘못된 검색 패턴 또는 구분 기호"가 #이 vimgrep을 방해하고있는 것처럼 보입니다.

또한 우선 순위 태그별로 줄을 정렬하는 방법을 알 수 없습니다.

미리 도움을 청하십시오. 나는 Vim을 배우는 중이다. 그리고이 문제를 해결할 수만 있다면 모든 조직을 위해이 문제를 사용할 수있을 것이다.

+0

그것은'의 vimgrep 패턴 주위에 구분 기호를 사용하는 것이 아마 최선의 방법 :

(모든 태그 라인을 찾아 그 라인의 첫 번째 문자별로 정렬) 한 번에 모든 작업을 수행하려면 vimgrep//% ... '. 또한': sort //'가 여기에 사용될 수도있다. – glts

+0

vim.org에는 할일드 플러그인이 많이 있습니다. 그들 중 하나를 시도 했습니까? – romainl

+0

몇 가지 다른 독점 프로그램뿐만 아니라 몇 가지 다른 플러그인을 살펴 보았습니다. 그러나 실제로 필요한 것은 태그를 검색하고 결과를 정렬하는 것입니다. 내 솔루션을 더 잘 유지할 수 있으면 더 간단합니다. – user2153281

답변

1

:vimgrep 명령은 두 가지 형태로 제공 : /{pattern}/를 들어

:vim[grep][!] /{pattern}/[g][j] {file} ... 
:vim[grep][!] {pattern} {file} ... 

, 실제로 비 키워드 구분 기호를 사용할 수 있습니다. <cword>#으로 시작하면 Vim은 이것을 시작 구분자로 해석하고 종료 구분자가 없기 때문에 불평합니다.

구분 기호를 선택하고 주위에 넣으십시오. <cword>; 식이 =를 등록하지만 지금 삽입 현재 단어, 검색은 문자 그대로 만들 \V을 사용하고 탈출 :

:noremap <f2> :vimgrep /<C-r>='\V'.escape(expand('<cword>'), '/\')<CR>/ % <bar> copen <enter> 

아, 그리고 you should use :noremap을; 매핑을 재 매핑 및 재귀에 대한 면역으로 만듭니다. 잉고 Karkat에

+0

도움을 주셔서 대단히 감사합니다! 이것은 모든 태그를 찾아 퀵 픽스 창에 넣기 위해 완벽하게 작동합니다. 이제 나는 그들을 어떻게 정렬해야 할까? using : sort는 줄 번호별로 정렬합니다. 그 이유는 파일 이름 뒤에 퀵 픽스 창의 줄에 처음 나열되어 있기 때문입니다. Dropbox/todo.txt | 100 col 34 | 정렬 할 실제 줄이 여기에 있습니다. 두 번째 | 이후 모든 것을 제외하도록 범위를 정의하려고하지만 내 범위 정의가 작동하지 않습니다. – user2153281

+0

퀵 픽스 창이 특별하므로 다른 버퍼처럼 수정할 수 없습니다. 당신은'getqflist()'와'setqflist()'함수를 사용하여 아이템을 얻고 조작 할 수있다. –

+0

하지만 'set modifiable'을 실행 한 다음 'sort'를 실행하면 잘못된 텍스트에 따라 목록 자체가 정렬됩니다. 심지어 버퍼를 닫으려고하면 저장할지 묻습니다. 다른 말로하면, 내가 묻는 것은 anyFileNameHere.txt | anyTextHere |를 무시하는 방식으로 '정렬'을 사용하는 방법입니다. – user2153281

0

덕분에 나는 다음과 같은 해결책을 마련 할 수 있었다 :

noremap <f2> :vimgrep /<C-r>='\V'.escape(expand('<cword>'), '/\')<CR>/ % <bar> copen <enter> 

위의 커서가 모든 것을 가져 와서 quickfix 창에 넣어 것입니다.

:set modifiable 
:sort /.*|.*|/ 

위의 예는 파일 이름과 줄/열 정보를 무시하고 빠른 수정 창에서 모든 것을 정렬합니다.

noremap <f2> :vimgrep /<C-r>='\V'.escape(expand('<cword>'), '/\')<CR>/ % <bar> copen <enter> <bar> :set modifiable <enter> <bar> :sort /.*\|.*\|/ <enter> 
관련 문제