코드 섹션으로 작업 제한


10

하루 하루의 일상 생활에서 변수 강조 또는 검색과 같은 특정 기능을 조작해야하는 경우가 많지만 편집 / 검색의 범위를 제한 한 적은 없었습니다.

vim에서 선택적으로 말하고, $color이러한 중괄호 세트 또는이 접기 등의 내부에 대한 모든 참조를 찾을 수있는 방법이 있습니까? 가능하면 비교적 일반적인 것이 이상적이므로 텍스트 편집 / 대체에 적용 할 수 있습니다.

예로서:

$color = "#fff";
function PickColor () {
  $color = "#bbb";
  $newColors = ["#000", "#fbf", $color];
  foreach ($newColors as $c) {
    if ($c == "#fff") {
       break;
    }
  }
}
$differentColor = $color;

그러나이 코드는 비교적 나쁜 예입니다. $ color의 모든 인스턴스를 교체 해야하는 경우 PickColor 함수의 컨텍스트 에서이 작업을 수행하는 방법은 무엇입니까? 또 다른 예를 들어, 사용 #하고 *당신은 라인과 패배의 수천을 걸치는 전체 파일에 반대 그냥이 기능 (기본적으로 검색을 포장)로 검색 범위를 제한 할 방법 텍스트 개체의 다음 인스턴스로 이동 할 수 있습니다 당신의 장소, 또는 당신이 가져서는 안되는 다른 기능의 무언가를 잘못 대체합니까?

답변:


15

몇 가지 방법이 있습니다.

1  | $color = "#fff";
2  | function PickColor () {
3  |     $color = "#bbb";
4  |     $newColors = ["#000", "#fbf", $color];
5  |     foreach ($newColors as $c) {
6  |         if ($c == "#fff") {
7  |             break;
8  |         }
9  |     }
10 | }
11 | $differentColor = $color;

줄 번호를 포함하도록 예제를 수정했습니다.

이제 다음과 같은 방식으로의 인스턴스 $color를 say로 바꿀 수 있습니다 $newColor.

라인 번호 범위

:1,11s/\$color/$newColor/g

이렇게하면 1-11 행에서 대체 작업이 수행됩니다.

상대 라인 범위

1 행에 커서를 놓고 ...

:.,11s/\$color/$newColor/g

이것은 범위가 현재 라인에서 시작하여 라인 11에서 끝나는 것입니다.

시각적 선택 범위

1 호선을 누르로 이동 Shift+V한 후 G. 이것은 시각적으로 1 행을 선택합니다. 그런 다음 ...

:'<,'>:s/\$color/$newColor/g

이렇게하면 대체가 선택한 범위로 대체됩니다. Vim은 활성화 된 선택 '<,'>으로을 누를 때 자동으로 범위를 삽입합니다 :.


내가 배울 수있는 무언가가 항상있다, 정력을 사랑하고 :) 메이크업 수명 쉽게와 매일 발견
카일 맥길에게

6

플러그인 경로를 사용하는 것이 편하다면 NrrwRgn 입니다.

블록을 시각적으로 선택한 다음 :NR명령 을 실행 하면 선택한 텍스트가 포함 된 새 버퍼가 분할됩니다. 이 버퍼를 수정할 수 있으며 저장할 때 원래 파일로 다시 저장됩니다.

제 생각에는이 플러그인은 문제를 아주 잘 해결하여 특정 범위에 적용하는 방법을 다시 생각하지 않고도 원하는 작업에 집중할 수 있습니다.


이것은 내가 맹세하는 플러그인 중 하나입니다. 일반 코드 파일로 다시 커밋 할 수있는 작은 스크래치 버퍼가있는 것과 같습니다.
craigp February

3

비주얼 라인 모드 (shift + v)에 관심이있는 블록을 선택한 다음 블록에 :적용 할 명령과 명령을 입력 합니다.

선택에서 교체하고 싶다면 :s/string/replacement_string


권리; 예 :VaB:s/\$color/replaced/g
wchargin

방금 추가했습니다, 좋은 지적 :)
Stefan Dorunga

0

중괄호 텍스트 객체 '}'를 사용하고 'i}'로 중괄호 내부를 선택하십시오.

함수의 여는 중괄호가있는 줄에 :

$<C-V>i}:s/\$color/$newColor/g

먼저 줄 끝 (열기 중괄호 안에 있거나 안쪽에 있음)으로 이동 한 다음 시각적 선택으로 이동 한 다음 중괄호 텍스트 객체를 사용하여 선택합니다. 'i}'는 중괄호 안에 있습니다. 'a}'는 중괄호 안에 있습니다.

중괄호가없는 언어의 경우 Vim Text Object : The Definitive Guide 는 다음과 같은 플러그인을 제안합니다.

  • Python 및 CoffeeScript와 같은 언어의 경우 들여 쓰기 개체 는 들여 쓰기 수준에 따라 텍스트 개체를 제공합니다 ai. 현재 들여 쓰기 수준과 위 줄을 포함합니다. ii위 줄을 제외한 현재 들여 쓰기 수준을 포함합니다.
  • Ruby 블록 은 키워드 의 존재 여부에 따라 텍스트 객체 ar및에 대한 지원을 추가 합니다.irend
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.