हेडर रखते समय बड़े डेटाफ़ाइल को कैसे स्क्रॉल करें


19

मान लीजिए कि मेरे पास कुछ बड़े डेटाफ़ाइल हैं, जो ऊर्ध्वाधर और क्षैतिज दिशा में स्क्रीन को ओवरफ्लो करते हैं। मैं इस फ़ाइल को कैसे ब्राउज़ कर सकता हूं, जबकि हेडर-लाइनें स्क्रीन पर रहती हैं?

फिलहाल, मैं उपयोग कर रहा हूं less -S, ताकि मैं अपनी फ़ाइल को क्षैतिज और लंबवत रूप से स्क्रॉल कर सकूं। हालाँकि, नीचे स्क्रॉल करते समय, हेडर लाइनें स्पष्ट रूप से गायब हो जाती हैं। क्या इनका उपयोग कम रखने का कोई तरीका है?

एक विकल्प के vimसाथ विभाजित स्क्रीन मोड में उपयोग कर रहा है :set nowrap। हालांकि, अब अगर मैं क्षैतिज रूप से स्क्रॉल करता हूं, तो शीर्ष विंडो उसी तरह स्क्रॉल नहीं :windo set scrollbindकरती है ( केवल ऊर्ध्वाधर स्क्रॉल के लिए काम करती है जहां तक ​​मुझे पता है)।


हेडर का मतलब क्या है, दृश्यमान रहता है, जबकि डेटा स्क्रॉल करता रहता है? क्या आपका मतलब है कि आप केवल कॉलम नाम वाली पहली पंक्ति ही चाहते हैं? क्या यह डेटा के साथ केवल एक फ़ाइल है और क्या यह डेटा बदलता रहता है और इसलिए आप केवल परिवर्तित पंक्तियों को देखना चाहते हैं? क्या आप केवल पहली N पंक्तियों या अंतिम N पंक्तियों को देखना चाहते हैं?
पॉलीएम

2
@ पॉलिम: lessया tail -fयह बिल्कुल वैसा ही व्यवहार करता है जैसा वे सामान्य रूप से करते हैं, सिवाय इसके कि स्क्रीन पर दिखाई गई पहली लाइन हमेशा हेडर लाइन होगी। वेबसाइटों (या एक्सेल) की तरह एक निश्चित हेडर लेकिन स्क्रॉलिंग बॉडी के साथ।
Mat

@polym ^ जो भी उन्होंने कहा!
देबंजन बसु 16

@polym, सोचो कि आप एक स्प्रेडशीट में एक क्षैतिज और ऊर्ध्वाधर दृश्य को कैसे फ्रीज कर सकते हैं। स्क्रॉल करते समय स्तंभ जमे हुए रहते हैं।
user208145

जवाबों:


11

यदि आप विम से परिचित हैं, तो यह संभवतः आपके लिए सबसे अच्छा विकल्प है। आप क्षैतिज-स्क्रॉल-बाइंड को केवल बदलकर सक्षम कर सकते हैं 'scrollopt':

set scrollopt=hor

तो vim -u NONE, आप के साथ वांछित व्यवहार मिलता है:

:set scrollopt=hor
:set nowrap
:1split
:windo set scrollbind

आप समायोजित करना चाहते हैं 'sidescroll'और 'sidescrolloff'बदलना चाहते हैं कि कितने स्तंभों को छोड़ दिया गया है और किनारे से कितनी दूर है क्रमशः लंघन शुरू होता है।


1
क्या कम के साथ ऐसा करने का कोई तरीका है? विशेष रूप से जब भारी डेटाफाइल्स (स्मृति में लोड करने के लिए बहुत बड़ा) के माध्यम से स्क्रॉल किया जाता है?
NM

@ एनएम: अन्य जवाब देखें
थोर

मैंने यह कोशिश की और जब मैं नीचे की खिड़की को नीचे स्क्रॉल करता हूं, तो ऊपर की खिड़की भी नीचे स्क्रॉल करती है
डैनियल सिरोडियो

@DanielSerodio: लगता है कुछ बदल गया है। यदि आप स्क्रॉलटॉप को सेट करते हैं तो यह काम करता है hor, अपडेट किया गया उत्तर देखें
थोर

अद्यतन किया गया उत्तर अपेक्षित रूप से काम करता है, बिजली की तेजी से उत्तर के लिए धन्यवाद :)
डैनियल सेरोडियो

17

स्क्रॉलिंग क्षेत्र सेट करने में सहायता करने वाले टर्मिनलों पर:

tailf() ( # args: <file> [<number-of-header-lines>]
  trap 'tput csr 0 "$((LINES-1))"' INT
  tput csr "$((1+${2-1}))" "$((LINES-1))"
  tput clear
  {
    head -n"${2-1}"
    printf "%${COLUMNS}s\n" "" | tr ' ' =
    tail -n "$((LINES-1-${2-1}))" -f
  } < "$1"
)

(यह मान लेता है कि टर्मिनल के आकार के आधार पर और चर सेट करता है zshया जैसे )।bash$COLUMNS$LINES


1
Dude! वह ईश्वरीय है! क्षमा करें, अपने आप को नियंत्रित नहीं कर सका। क्या आप निम्नलिखित कार्यों को लागू करने के लिए मुझे वेबपेज या कमांड या चर पर निर्देशित कर सकते हैं?
देबंजन बसु

1. बाहर निकलें के साथ q 2. नीचे स्क्रॉल करें upऔर downचाबियाँ
देबंजन बसु

हर बार स्क्रीन को फिर से lessउपयोग किए बिना headऔर tailस्क्रीन को फिर से रीडायरेक्ट करना संभव है ? मैं अभी भी <3 अपने समाधान btw। मैं इसे अभी तक सही नहीं चिह्नित कर रहा हूं क्योंकि आप इसे संपादित करते हुए प्रतीत होते हैं और मैं नहीं चाहता कि आप आत्मसंतुष्ट हों; शालीनता एक रचनात्मकता-हत्यारा है, मुझे बताया गया है! :)
देबंजन बसु

@DebanjanBasu आप ऊपर के less -Xस्थान पर उपयोग कर सकते हैं , tail -n ...लेकिन "अप" कुंजी वहां हेडर को हटा देता है।
स्टीफन चेज़लस

जैसा कि मैंने कहा, यदि आपके पास कोई बेहतर विचार है तो बस मुझे उस ओर इंगित करें, या बेहतर अभी भी कृपया अपने उत्तर को आगे बढ़ाएं। मैं इसे सही चिह्नित करने के लिए है क्योंकि आप था है सवाल है कि मैं शुरू में पूछा जवाब दे दिया। यह विचार है कि lessएक हेडर और एक पाद लेख के बीच एक वातावरण को प्रशस्त किया जाए, ताकि इसे अधिक सामान्य उपकरण बनाया जा सके।
देबंजन बसु

6

इसे आज़माएं (आपको इंस्टॉल करना होगा multitail):

multitail -du -t "$(head -n 1 filename)" filename

या, एक पंक्ति से अधिक हेडर के लिए:

multitail -wh 2 -l "head -n 2 filename" filename

यदि आप फ़ाइल के बजाय कमांड आउटपुट का पालन करना चाहते हैं:

multitail -wh 2 -l "command | head -n 2" -l command

या -tउपयुक्त के रूप में उपयोग करें । ध्यान दें कि आपको उपयोग करने की आवश्यकता हो सकती है unbufferताकि आपका कमांड आउटपुट तुरंत दिखाई दे।

आप प्रपत्रों के -Dलिए स्थिति लाइनों के प्रदर्शन को अक्षम करने के लिए उपयोग कर सकते हैं -wh(यह प्रपत्र के उद्देश्य को हरा देगा -t)।


2

थोर के जवाब में ऊर्ध्वाधर "स्क्रॉलटॉप" को अक्षम करने का उल्लेख नहीं किया गया है, जो दोनों खिड़कियों को लंबवत रूप से स्क्रॉल करता है। तो मेरे लिए इसका पूरा हल विम में है:

:set scrollopt+=hor
:set scrollopt-=ver
:set nowrap
:1split
:windo set scrollbind

आप अपनी प्राथमिकताओं के आधार पर scrolloptसीधे :scrollopt=horया इसके साथ सेट कर सकते :scrollopt=hor,jumpहैं। यहाँ के लिए VimDoc है scrollopt
माइकल

1

यह उतना ही है जितना मुझे मिला है tmux:

#!/bin/bash

tmux new-session -s main -n 'w1' -d
tmux send-keys -t main:w1.0 "tail -f <(head -n1 $1)" C-j
tmux split-window -v
tmux resize-pane -t 0 -y 2
tmux send-keys -t 1 "tail -n+2 $1|less -S" C-j
tmux attach -t main

यह विंडो विभाजन के लिए user80519 के उत्तर का विस्तार है tmux। के रूप में सहेजें hless.sh, इसे निष्पादन योग्य बनाएं और इसका उपयोग करें

hless.sh file
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.