W tym samym duchu, co inne pytanie: linia kota X do linii Y dużego pliku :
Czy istnieje sposób na otwarcie z poziomu Emacsa (i wyświetlenie w buforze) danego zestawu linii (np. Wszystkich linii między linią X
a Y
) z dużego pliku tekstowego?
Np. Otwórz i pokaż w buforze wszystkie linie między liniami 57890000 i 57890010 z pliku huge.txt
Aktualizacja: Interesuje mnie rozwiązanie, które przynajmniej może otwierać linie tylko do odczytu (tylko do celów wyświetlania), chociaż byłoby świetnie, gdybym mógł również edytować linie (i zapisać do oryginalnego pliku).
emacs
large-files
Amelio Vazquez-Reina
źródło
źródło
ed
?57890000,57890010p
Odpowiedzi:
Jeśli chcesz otworzyć cały plik (co wymaga), ale pokaż tylko jego część w oknie edytora, użyj zawężania . Wybierz część bufora, nad którą chcesz pracować, i naciśnij
C-x n n
(narrow-to-region
). Powiedz „tak”, jeśli pojawi się monit o wyłączonym poleceniu. NaciśnijC-x n w
(widen
), aby ponownie zobaczyć cały bufor. Jeśli zapiszesz bufor, wybierany jest cały plik: wszystkie dane wciąż tam są, zwężenie ogranicza tylko to, co widzisz.Jeśli chcesz wyświetlić część pliku, możesz wstawić go do bieżącego bufora za
shell-command
pomocą przedrostka argument (M-1 M-!
); uruchom odpowiednią komendę, aby wyodrębnić pożądane linie , np<huge.txt tail -n +57890001 | head -n 11
.Istnieje również funkcja Lisp,
insert-file-contents
która może przyjmować zakres bajtów. Możesz go wywołać za pomocąM-:
(eval-expression
):Pamiętaj, że możesz napotkać limit wielkości całkowitych (zależnie od wersji i platformy, sprawdź wartość
most-positive-fixnum
).Teoretycznie byłoby możliwe napisanie trybu Emacsa, który ładuje i zapisuje części plików w sposób przezroczysty w razie potrzeby (choć ograniczenie wielkości całkowitych uniemożliwiłoby użycie rzeczywistych przesunięć plików na komputerach 32-bitowych). Jedyny wysiłek w tym kierunku, jaki znam, to VLF (link do GitHub tutaj ).
źródło
Może ci się przydać ta kombinacja perla i elisp . Umożliwia przesyłanie danych do bufora. Kolejne wywołania przy użyciu tej samej nazwy bufora dołączą nowe wiersze do tego samego bufora.
Możesz „edytować” bufor , ale edycja w żaden sposób nie odzwierciedla powrotu do źródła (którym jest potok ) ... Nie pokazuje żadnych numerów linii, ale możesz dostosować dane wejściowe, aby zawierały numerowany prefiks dla każdego linia.
W buforze:
Lub z dodanymi numerami linii:
W buforze:
Znalazłem to na StackOverflow Q / A
źródło
Możesz to zrobić z View Large Files , trybem emacs minor zaprojektowanym specjalnie do tego przypadku.
źródło