I would implement IStorage interface wrapper that controls what part of InputStream instance from getContents() to return.
Then I would implement wrapper around FileEditoInput with overridden method getStorage(). This method should return IStorage implementation wrapper described above which wraps real IStorage instance returned by real FileEditorInput instance. All this wrappers should have start position in file and length parameters to control what part of file should be presented in editor.